Data preparation
NAs introduced by coercionNAs introduced by coercionNAs introduced by coercionNAs introduced by coercionNAs introduced by coercionNAs introduced by coercion‘-’ not meaningful for factorsJoining, by = c("study", "subid", "target", "happy", "depressed", "fear", "angry", "calm", "sounds", "seeing", "temperature", "odors", "depth", "computations", "thoughts", "reasoning", "remembering", "beliefs", "hungry", "tired", "pain", "nauseated", "safe", "love", "recognizing", "communicating", "guilt", "disrespected", "free_will", "choices", "self_restraint", "intentions", "goal", "conscious", "self_aware", "desires", "embarrassed", "emo_recog", "joy", "morality", "personality", "pleasure", "pride", "CATCH")
Joining, by = c("study", "subid")
back to TOC
Analysis plan
For all studies we conduct exploratory factor analyses using Pearson correlations to find minimum residual solutions.
For each study, we first examine maximal unrotated and rotated solutions. To determine the maximum number of factors to extract, we use the following rule of thumb: With \(p\) observations per participant, we can extract a maximum of \(k\) factors, where \((p-k)*2 > p+k\), i.e., \(k < p/3\). Thus, with 40 mental capacity items, we can extract a maximum of 13 factors.
To determine how many factors to retain, we use the following preset retention criteria, considering the unrotated maximal solution (unless otherwise noted):
- Each factor must have an eigenvalue >1.0.
- Each factor must individually account for >5% of the total variance in the maximal model.
- After rotation, each factor must be the dominant factor (i.e., the factor with the highest factor loading) for ≥1 mental capacity item.
We then examine and interpret varimax-rotated solutions, extracting only the number of factors that meet these criteria.
Note: For Studies 1-2, we initially planned to conduct dimension reduction analyses for each condition (beetle vs. robot) separately. However, we now consider this analysis plan to have been fundamentally flawed: Each of these separate analyses is only capable of surfacing factors that highlight substantial disagreement among participants within that condition thus failing to capture key differences in attributions of mental capacities to beetles vs. robots, with no formal means of synthesizing results across conditions. Nonetheless, the results of these analyses are generally consistent with the findings reported here: The most prominent and reliable finding within each condition is that participants distinguish between emotional and perceptual varieties of experience. See https://osf.io/zd3mu for the preregistered analyses, including analysis scripts.
Study 1
Design: 2 conditions (beetle, robot), between-subjects Date conducted: 2015-12-15
Demographics
NAs introduced by coercion
Joining, by = c("condition", "min_age", "max_age", "median_age", "mean_age", "sd_age")
Column `condition` joining factor and character vector, coercing into character vector
back to TOC
Exploratory factor analysis
Step 1: Run maximal EFA (without and with rotation)
Factor Analysis using method = minres
Call: fa(r = d1_all, nfactors = 13, rotate = "none", fm = "minres",
cor = chosenCorType)
Standardized loadings (pattern matrix) based upon correlation matrix
MR1 MR2 MR3 MR4 MR5 MR6 MR7 MR8 MR9 MR10 MR11
happy 0.85 -0.08 -0.12 0.07 -0.21 0.09 -0.10 0.09 -0.03 0.00 0.01
depressed 0.80 0.04 -0.32 0.16 -0.13 -0.11 -0.06 -0.02 0.01 -0.04 -0.09
fear 0.76 -0.38 0.20 0.02 0.03 -0.01 0.10 0.02 -0.07 -0.09 0.11
angry 0.80 -0.13 -0.07 0.11 -0.11 -0.07 -0.02 0.03 0.02 -0.05 0.08
calm 0.77 -0.16 0.11 -0.02 -0.10 0.13 0.10 -0.07 -0.01 -0.04 -0.03
sounds 0.17 0.39 0.48 0.32 -0.05 0.23 -0.04 0.01 0.10 -0.05 0.05
seeing 0.35 0.20 0.60 0.17 0.14 -0.09 -0.08 0.03 -0.05 0.03 -0.02
temperature 0.27 0.33 0.59 0.19 0.08 0.03 0.03 0.22 0.11 -0.03 -0.02
odors 0.41 0.03 0.50 0.23 0.13 0.05 -0.09 -0.10 -0.02 -0.02 -0.20
depth 0.31 0.41 0.38 0.07 0.01 -0.01 -0.04 0.01 0.07 0.11 0.12
computations -0.25 0.83 -0.14 0.05 -0.15 -0.01 0.06 0.06 0.05 -0.01 0.07
thoughts 0.78 0.03 -0.02 -0.17 -0.02 0.04 -0.15 0.00 -0.03 0.08 0.00
reasoning 0.44 0.61 0.02 -0.17 0.02 -0.02 -0.10 0.04 -0.10 0.04 -0.04
remembering 0.18 0.69 0.28 -0.04 -0.14 -0.01 0.12 0.03 -0.07 -0.07 -0.04
beliefs 0.63 0.28 -0.37 0.00 0.21 0.02 0.01 0.03 0.03 0.04 -0.04
hungry 0.60 -0.62 0.33 0.03 0.17 -0.01 -0.02 0.00 -0.02 0.00 -0.03
tired 0.74 -0.37 0.25 0.00 0.01 -0.06 0.05 -0.03 0.08 -0.04 0.08
pain 0.69 -0.53 0.32 0.02 0.13 -0.02 -0.02 0.01 -0.07 0.02 0.08
nauseated 0.81 -0.19 0.01 0.15 -0.21 -0.03 0.08 -0.19 0.01 0.07 -0.05
safe 0.76 -0.23 0.14 -0.03 -0.07 0.19 0.26 0.06 -0.16 -0.02 -0.01
love 0.82 0.07 -0.32 0.09 -0.05 0.01 -0.06 0.12 -0.01 0.01 -0.01
recognizing 0.20 0.78 0.15 0.05 -0.10 -0.02 0.02 -0.15 -0.08 0.03 0.04
communicating 0.29 0.55 0.28 0.00 0.03 -0.05 0.09 -0.12 -0.16 0.11 0.13
guilt 0.73 0.11 -0.39 0.13 0.08 -0.01 0.00 -0.06 0.04 -0.01 -0.09
disrespected 0.72 0.13 -0.37 0.20 0.08 -0.17 0.18 -0.08 0.06 -0.12 -0.01
free_will 0.75 -0.26 0.11 -0.12 -0.05 0.00 -0.04 0.09 -0.06 -0.07 -0.12
choices 0.46 0.35 0.37 -0.28 0.00 -0.13 0.06 0.10 -0.12 -0.04 -0.16
self_restraint 0.63 0.26 -0.08 -0.16 0.07 0.16 0.02 -0.23 0.07 -0.12 -0.07
intentions 0.68 -0.03 0.16 -0.29 -0.03 0.01 0.11 0.07 0.29 -0.03 0.03
goal 0.35 0.44 0.34 -0.15 -0.04 -0.27 -0.02 -0.03 0.14 -0.01 -0.07
conscious 0.76 -0.23 0.13 -0.06 0.02 0.07 -0.05 -0.09 0.04 0.10 0.01
self_aware 0.74 -0.01 0.03 -0.11 0.01 0.01 -0.11 -0.08 0.05 0.05 0.05
desires 0.78 -0.22 0.09 -0.17 -0.02 -0.08 0.01 -0.02 0.02 0.08 0.05
embarrassed 0.71 0.16 -0.49 0.15 0.17 -0.10 0.10 0.13 -0.04 0.05 0.01
emo_recog 0.61 0.41 -0.25 -0.05 0.21 0.05 -0.07 -0.04 0.01 0.10 0.05
joy 0.86 -0.03 -0.17 0.02 -0.23 0.07 -0.16 0.08 0.00 0.09 -0.05
morality 0.48 0.47 -0.22 -0.15 0.14 0.28 0.09 0.07 0.04 0.04 -0.01
personality 0.70 0.31 -0.15 -0.07 0.06 -0.01 -0.21 -0.01 -0.09 -0.33 0.17
pleasure 0.82 -0.25 0.10 -0.03 -0.07 -0.11 0.04 0.04 0.01 0.07 0.10
pride 0.79 0.14 -0.39 0.11 0.04 -0.05 0.05 0.05 -0.03 0.07 -0.02
MR12 MR13 h2 u2 com
happy 0.06 -0.15 0.84 0.16 1.4
depressed -0.05 -0.03 0.81 0.19 1.6
fear 0.02 0.06 0.80 0.20 1.8
angry 0.02 0.08 0.71 0.29 1.2
calm 0.01 0.06 0.68 0.32 1.3
sounds 0.04 0.10 0.60 0.40 3.9
seeing 0.02 -0.04 0.59 0.41 2.3
temperature -0.06 0.04 0.64 0.36 2.9
odors 0.06 0.02 0.55 0.45 3.2
depth -0.08 -0.15 0.48 0.52 3.8
computations 0.01 0.04 0.80 0.20 1.4
thoughts 0.03 0.11 0.69 0.31 1.2
reasoning -0.11 0.04 0.63 0.37 2.3
remembering -0.03 -0.02 0.62 0.38 1.7
beliefs -0.03 0.05 0.67 0.33 2.4
hungry -0.03 -0.07 0.90 0.10 2.7
tired -0.06 -0.09 0.78 0.22 1.9
pain -0.03 0.00 0.89 0.11 2.5
nauseated -0.28 0.06 0.90 0.10 1.8
safe 0.03 -0.05 0.79 0.21 1.8
love 0.07 -0.06 0.82 0.18 1.4
recognizing 0.04 0.05 0.71 0.29 1.4
communicating 0.14 -0.04 0.57 0.43 3.0
guilt 0.08 -0.07 0.75 0.25 1.8
disrespected 0.07 0.00 0.81 0.19 2.2
free_will 0.08 0.16 0.73 0.27 1.6
choices -0.06 -0.06 0.63 0.37 4.6
self_restraint 0.02 -0.10 0.62 0.38 2.3
intentions 0.02 0.03 0.68 0.32 2.0
goal 0.06 -0.03 0.56 0.44 4.3
conscious 0.01 0.00 0.67 0.33 1.4
self_aware 0.10 0.02 0.60 0.40 1.2
desires 0.01 0.07 0.71 0.29 1.4
embarrassed -0.04 -0.01 0.86 0.14 2.4
emo_recog -0.07 0.05 0.68 0.32 2.7
joy 0.01 -0.08 0.87 0.13 1.4
morality -0.04 -0.04 0.64 0.36 3.7
personality -0.09 -0.01 0.81 0.19 2.5
pleasure 0.04 0.00 0.79 0.21 1.3
pride 0.02 0.07 0.82 0.18 1.7
MR1 MR2 MR3 MR4 MR5 MR6 MR7 MR8 MR9 MR10 MR11 MR12
SS loadings 16.55 5.24 3.42 0.75 0.51 0.42 0.35 0.31 0.28 0.26 0.24 0.21
Proportion Var 0.41 0.13 0.09 0.02 0.01 0.01 0.01 0.01 0.01 0.01 0.01 0.01
Cumulative Var 0.41 0.54 0.63 0.65 0.66 0.67 0.68 0.69 0.70 0.70 0.71 0.71
Proportion Explained 0.58 0.18 0.12 0.03 0.02 0.01 0.01 0.01 0.01 0.01 0.01 0.01
Cumulative Proportion 0.58 0.76 0.88 0.90 0.92 0.94 0.95 0.96 0.97 0.98 0.99 0.99
MR13
SS loadings 0.18
Proportion Var 0.00
Cumulative Var 0.72
Proportion Explained 0.01
Cumulative Proportion 1.00
Mean item complexity = 2.2
Test of the hypothesis that 13 factors are sufficient.
The degrees of freedom for the null model are 780 and the objective function was 36.39 with Chi Square of 14185
The degrees of freedom for the model are 338 and the objective function was 1.03
The root mean square of the residuals (RMSR) is 0.01
The df corrected root mean square of the residuals is 0.01
The harmonic number of observations is 405 with the empirical chi square 57.84 with prob < 1
The total number of observations was 405 with Likelihood Chi Square = 390.74 with prob < 0.025
Tucker Lewis Index of factoring reliability = 0.991
RMSEA index = 0.024 and the 90 % confidence intervals are 0.008 0.028
BIC = -1638.58
Fit based upon off diagonal values = 1
Measures of factor score adequacy
MR1 MR2 MR3 MR4 MR5 MR6 MR7
Correlation of scores with factors 0.99 0.98 0.96 0.84 0.85 0.76 0.78
Multiple R square of scores with factors 0.99 0.95 0.92 0.71 0.72 0.58 0.61
Minimum correlation of possible factor scores 0.97 0.90 0.85 0.41 0.44 0.17 0.22
MR8 MR9 MR10 MR11 MR12 MR13
Correlation of scores with factors 0.74 0.69 0.73 0.68 0.72 0.65
Multiple R square of scores with factors 0.55 0.48 0.53 0.46 0.52 0.42
Minimum correlation of possible factor scores 0.10 -0.04 0.06 -0.09 0.04 -0.17
[1] 3
Step 2: Run EFA with varimax rotation
Factor Analysis using method = minres
Call: fa(r = d1_all, nfactors = nfactors_d1_all, rotate = chosenRotType,
fm = "minres", cor = chosenCorType)
Standardized loadings (pattern matrix) based upon correlation matrix
MR1 MR2 MR3 h2 u2 com
happy 0.57 0.63 0.09 0.74 0.26 2.0
depressed 0.39 0.76 0.03 0.73 0.27 1.5
fear 0.83 0.26 0.06 0.76 0.24 1.2
angry 0.60 0.55 0.08 0.67 0.33 2.0
calm 0.66 0.40 0.17 0.63 0.37 1.8
sounds 0.06 -0.05 0.61 0.38 0.62 1.0
seeing 0.35 -0.08 0.63 0.52 0.48 1.6
temperature 0.21 -0.07 0.68 0.51 0.49 1.2
odors 0.45 -0.02 0.45 0.40 0.60 2.0
depth 0.10 0.11 0.62 0.41 0.59 1.1
computations -0.73 0.21 0.42 0.76 0.24 1.8
thoughts 0.51 0.55 0.21 0.61 0.39 2.3
reasoning -0.07 0.49 0.56 0.55 0.45 2.0
remembering -0.20 0.18 0.71 0.58 0.42 1.3
beliefs 0.11 0.77 0.12 0.61 0.39 1.1
hungry 0.92 -0.01 -0.06 0.86 0.14 1.0
tired 0.83 0.22 0.10 0.75 0.25 1.2
pain 0.92 0.09 0.02 0.86 0.14 1.0
nauseated 0.67 0.48 0.09 0.68 0.32 1.9
safe 0.70 0.35 0.13 0.63 0.37 1.5
love 0.39 0.79 0.06 0.78 0.22 1.5
recognizing -0.28 0.31 0.70 0.66 0.34 1.7
communicating -0.03 0.21 0.64 0.46 0.54 1.2
guilt 0.27 0.79 0.01 0.70 0.30 1.2
disrespected 0.27 0.77 0.04 0.66 0.34 1.3
free_will 0.71 0.35 0.09 0.64 0.36 1.5
choices 0.24 0.20 0.60 0.45 0.55 1.6
self_restraint 0.24 0.57 0.30 0.47 0.53 1.9
intentions 0.54 0.35 0.26 0.48 0.52 2.2
goal 0.09 0.17 0.62 0.42 0.58 1.2
conscious 0.71 0.36 0.12 0.64 0.36 1.6
self_aware 0.53 0.48 0.21 0.55 0.45 2.3
desires 0.70 0.40 0.11 0.66 0.34 1.6
embarrassed 0.20 0.85 -0.02 0.76 0.24 1.1
emo_recog 0.06 0.72 0.28 0.60 0.40 1.3
joy 0.53 0.68 0.10 0.75 0.25 1.9
morality -0.04 0.62 0.31 0.48 0.52 1.5
personality 0.23 0.67 0.30 0.59 0.41 1.6
pleasure 0.75 0.41 0.11 0.75 0.25 1.6
pride 0.29 0.84 0.05 0.79 0.21 1.3
MR1 MR2 MR3
SS loadings 10.13 9.69 5.12
Proportion Var 0.25 0.24 0.13
Cumulative Var 0.25 0.50 0.62
Proportion Explained 0.41 0.39 0.21
Cumulative Proportion 0.41 0.79 1.00
Mean item complexity = 1.5
Test of the hypothesis that 3 factors are sufficient.
The degrees of freedom for the null model are 780 and the objective function was 36.39 with Chi Square of 14185
The degrees of freedom for the model are 663 and the objective function was 3.83
The root mean square of the residuals (RMSR) is 0.03
The df corrected root mean square of the residuals is 0.03
The harmonic number of observations is 405 with the empirical chi square 479.29 with prob < 1
The total number of observations was 405 with Likelihood Chi Square = 1486.88 with prob < 4.2e-65
Tucker Lewis Index of factoring reliability = 0.927
RMSEA index = 0.058 and the 90 % confidence intervals are 0.052 0.059
BIC = -2493.69
Fit based upon off diagonal values = 1
Measures of factor score adequacy
MR1 MR2 MR3
Correlation of scores with factors 0.98 0.97 0.95
Multiple R square of scores with factors 0.97 0.95 0.90
Minimum correlation of possible factor scores 0.93 0.90 0.81
back to TOC
Study 2
Design: 2 conditions (beetle, robot), between-subjects (replication of Study 1) Date conducted: 2016-01-12
Demographics
Joining, by = c("condition", "min_age", "max_age", "median_age", "mean_age", "sd_age")
Column `condition` joining factor and character vector, coercing into character vector
back to TOC
Exploratory factor analysis
Step 1: Run maximal EFA (without and with rotation)
Factor Analysis using method = minres
Call: fa(r = d2_all, nfactors = 13, rotate = "none", fm = "minres",
cor = chosenCorType)
Standardized loadings (pattern matrix) based upon correlation matrix
MR1 MR2 MR3 MR4 MR5 MR6 MR7 MR8 MR9 MR10 MR11
happy 0.83 -0.08 -0.18 -0.18 0.15 -0.04 -0.04 0.01 -0.08 0.02 0.00
depressed 0.76 -0.01 -0.37 -0.02 0.13 0.04 -0.01 0.15 0.00 0.02 -0.12
fear 0.76 -0.36 0.21 0.04 0.05 -0.03 -0.06 0.00 0.03 0.00 0.08
angry 0.77 -0.17 -0.06 -0.05 0.19 0.02 -0.06 -0.13 0.13 -0.23 -0.07
calm 0.74 -0.05 0.08 -0.23 0.04 -0.08 -0.03 -0.04 -0.14 0.01 0.03
sounds 0.23 0.46 0.50 -0.11 0.13 0.12 0.02 0.05 0.05 -0.03 0.14
seeing 0.45 0.24 0.55 0.08 -0.05 0.13 -0.12 -0.07 0.01 0.07 0.04
temperature 0.32 0.28 0.53 0.16 0.16 0.02 -0.10 0.11 -0.10 -0.02 -0.08
odors 0.48 0.10 0.51 0.34 0.09 -0.02 -0.16 0.13 -0.16 -0.06 -0.10
depth 0.26 0.47 0.35 0.33 0.25 -0.38 0.34 0.01 0.06 0.02 0.04
computations -0.26 0.83 -0.12 -0.13 0.13 0.02 0.06 0.08 0.02 0.00 -0.01
thoughts 0.77 0.00 -0.01 -0.11 -0.23 -0.10 0.12 0.07 -0.08 0.01 -0.05
reasoning 0.36 0.59 -0.04 0.03 -0.21 -0.08 -0.03 0.00 -0.08 0.06 -0.07
remembering 0.19 0.69 0.24 -0.19 -0.01 0.08 0.00 0.06 -0.01 0.06 0.10
beliefs 0.53 0.26 -0.33 0.07 -0.08 0.20 0.16 0.00 -0.24 0.06 0.01
hungry 0.61 -0.62 0.31 0.19 -0.02 0.08 -0.04 0.00 -0.02 0.07 0.01
tired 0.73 -0.40 0.26 0.02 0.03 0.04 0.04 -0.08 0.06 0.02 0.04
pain 0.67 -0.52 0.28 0.11 -0.01 0.04 -0.02 0.01 0.07 0.09 -0.01
nauseated 0.70 -0.20 -0.02 0.00 0.12 0.03 0.00 -0.02 0.02 0.13 0.05
safe 0.75 -0.22 0.13 -0.05 -0.02 -0.09 -0.03 -0.14 -0.18 -0.06 0.22
love 0.74 0.00 -0.34 -0.05 0.08 0.09 0.05 0.14 0.02 0.06 -0.05
recognizing 0.20 0.74 0.04 -0.08 0.11 0.02 -0.02 0.02 0.00 -0.02 0.09
communicating 0.36 0.51 0.38 -0.05 0.04 0.20 -0.02 0.02 0.12 0.03 -0.02
guilt 0.64 0.14 -0.55 0.15 0.07 0.10 -0.01 0.01 -0.02 -0.02 0.02
disrespected 0.64 0.09 -0.43 0.17 0.04 0.03 -0.07 0.01 0.09 -0.14 0.09
free_will 0.66 -0.28 0.23 -0.01 -0.17 0.10 0.05 0.16 0.19 0.03 -0.03
choices 0.47 0.43 0.35 -0.10 -0.11 0.05 0.03 -0.04 0.08 0.07 -0.01
self_restraint 0.49 0.35 -0.15 0.09 -0.22 -0.05 0.03 -0.03 -0.04 -0.09 -0.07
intentions 0.67 0.00 0.25 0.00 -0.22 0.12 0.25 -0.13 0.04 -0.15 -0.04
goal 0.40 0.44 0.38 -0.05 -0.02 0.09 -0.03 -0.16 -0.08 -0.15 -0.14
conscious 0.72 -0.27 0.21 -0.10 -0.19 -0.11 0.02 0.14 -0.06 -0.04 0.13
self_aware 0.73 0.06 -0.03 -0.08 -0.20 -0.19 -0.07 0.27 0.08 -0.12 0.02
desires 0.79 -0.16 0.03 -0.02 0.02 0.01 0.18 -0.12 0.02 0.09 -0.12
embarrassed 0.61 0.12 -0.53 0.15 0.06 0.16 0.05 0.08 -0.06 -0.01 0.03
emo_recog 0.57 0.42 -0.27 0.14 -0.08 -0.12 -0.11 -0.14 0.07 0.14 0.03
joy 0.82 -0.07 -0.14 -0.22 0.20 -0.11 -0.08 -0.07 -0.01 -0.02 -0.04
morality 0.40 0.52 -0.27 0.19 -0.21 -0.11 -0.22 -0.12 0.09 0.07 0.01
personality 0.64 0.31 -0.16 -0.14 0.03 -0.13 -0.06 -0.05 0.09 0.03 -0.05
pleasure 0.81 -0.24 0.03 -0.17 0.09 -0.09 -0.01 0.00 -0.01 0.11 -0.12
pride 0.70 0.09 -0.47 0.15 0.03 0.13 0.06 -0.01 0.06 -0.04 0.12
MR12 MR13 h2 u2 com
happy -0.02 -0.04 0.80 0.203 1.3
depressed -0.03 0.01 0.76 0.240 1.7
fear 0.05 0.09 0.77 0.226 1.7
angry 0.08 0.16 0.79 0.214 1.8
calm -0.04 0.04 0.65 0.353 1.4
sounds 0.11 -0.08 0.61 0.392 3.2
seeing -0.11 0.05 0.63 0.374 2.9
temperature 0.06 -0.05 0.55 0.448 3.2
odors 0.03 -0.05 0.71 0.294 3.7
depth -0.08 0.01 0.86 0.141 6.2
computations 0.07 -0.02 0.82 0.179 1.4
thoughts 0.05 -0.04 0.71 0.290 1.4
reasoning 0.10 -0.02 0.56 0.441 2.2
remembering -0.05 -0.01 0.63 0.375 1.7
beliefs 0.02 0.16 0.61 0.385 3.7
hungry -0.05 0.00 0.90 0.099 2.8
tired -0.02 0.04 0.78 0.219 1.9
pain 0.01 0.05 0.83 0.169 2.4
nauseated 0.08 0.05 0.58 0.419 1.4
safe -0.02 -0.08 0.75 0.254 1.7
love 0.03 -0.02 0.70 0.299 1.6
recognizing 0.03 0.13 0.63 0.369 1.3
communicating -0.10 0.09 0.61 0.389 3.5
guilt -0.14 0.00 0.80 0.204 2.4
disrespected 0.10 -0.06 0.69 0.309 2.3
free_will -0.06 -0.11 0.69 0.308 2.3
choices 0.04 -0.04 0.56 0.435 3.3
self_restraint -0.09 0.12 0.49 0.513 3.0
intentions -0.04 -0.07 0.68 0.320 2.2
goal -0.02 -0.07 0.59 0.409 4.0
conscious 0.01 0.03 0.74 0.258 2.0
self_aware 0.02 0.08 0.72 0.277 1.8
desires 0.19 -0.01 0.76 0.244 1.5
embarrassed -0.08 -0.08 0.74 0.257 2.5
emo_recog 0.02 0.02 0.68 0.319 3.1
joy -0.08 -0.12 0.84 0.160 1.5
morality 0.06 -0.05 0.67 0.328 4.2
personality -0.16 -0.03 0.61 0.390 2.1
pleasure 0.01 0.02 0.78 0.217 1.4
pride 0.06 -0.08 0.79 0.211 2.2
MR1 MR2 MR3 MR4 MR5 MR6 MR7 MR8 MR9 MR10 MR11 MR12
SS loadings 14.94 5.37 3.77 0.79 0.68 0.52 0.41 0.36 0.31 0.26 0.25 0.22
Proportion Var 0.37 0.13 0.09 0.02 0.02 0.01 0.01 0.01 0.01 0.01 0.01 0.01
Cumulative Var 0.37 0.51 0.60 0.62 0.64 0.65 0.66 0.67 0.68 0.69 0.69 0.70
Proportion Explained 0.53 0.19 0.13 0.03 0.02 0.02 0.01 0.01 0.01 0.01 0.01 0.01
Cumulative Proportion 0.53 0.72 0.86 0.89 0.91 0.93 0.94 0.96 0.97 0.98 0.99 0.99
MR13
SS loadings 0.20
Proportion Var 0.00
Cumulative Var 0.70
Proportion Explained 0.01
Cumulative Proportion 1.00
Mean item complexity = 2.4
Test of the hypothesis that 13 factors are sufficient.
The degrees of freedom for the null model are 780 and the objective function was 33.07 with Chi Square of 12924.08
The degrees of freedom for the model are 338 and the objective function was 1.02
The root mean square of the residuals (RMSR) is 0.01
The df corrected root mean square of the residuals is 0.02
The harmonic number of observations is 406 with the empirical chi square 64.06 with prob < 1
The total number of observations was 406 with Likelihood Chi Square = 390.7 with prob < 0.025
Tucker Lewis Index of factoring reliability = 0.99
RMSEA index = 0.024 and the 90 % confidence intervals are 0.008 0.028
BIC = -1639.45
Fit based upon off diagonal values = 1
Measures of factor score adequacy
MR1 MR2 MR3 MR4 MR5 MR6 MR7
Correlation of scores with factors 0.99 0.98 0.96 0.88 0.84 0.82 0.79
Multiple R square of scores with factors 0.98 0.95 0.93 0.77 0.71 0.68 0.62
Minimum correlation of possible factor scores 0.97 0.90 0.86 0.54 0.42 0.36 0.24
MR8 MR9 MR10 MR11 MR12 MR13
Correlation of scores with factors 0.75 0.71 0.69 0.68 0.66 0.64
Multiple R square of scores with factors 0.56 0.50 0.48 0.46 0.44 0.40
Minimum correlation of possible factor scores 0.12 0.00 -0.04 -0.07 -0.12 -0.19
[1] 3
Step 2: Run EFA with varimax rotation
Factor Analysis using method = minres
Call: fa(r = d2_all, nfactors = nfactors_d2_all, rotate = chosenRotType,
fm = "minres", cor = chosenCorType)
Standardized loadings (pattern matrix) based upon correlation matrix
MR1 MR2 MR3 h2 u2 com
happy 0.57 0.63 0.08 0.73 0.27 2.0
depressed 0.41 0.73 0.00 0.70 0.30 1.6
fear 0.83 0.21 0.09 0.75 0.25 1.2
angry 0.62 0.47 0.08 0.61 0.39 1.9
calm 0.59 0.39 0.24 0.56 0.44 2.1
sounds 0.07 -0.06 0.71 0.51 0.49 1.0
seeing 0.37 -0.02 0.65 0.56 0.44 1.6
temperature 0.25 -0.07 0.61 0.44 0.56 1.4
odors 0.45 -0.01 0.51 0.46 0.54 2.0
depth 0.03 0.08 0.58 0.34 0.66 1.0
computations -0.73 0.19 0.45 0.77 0.23 1.8
thoughts 0.55 0.49 0.23 0.60 0.40 2.3
reasoning -0.11 0.44 0.52 0.48 0.52 2.1
remembering -0.19 0.18 0.70 0.56 0.44 1.3
beliefs 0.11 0.64 0.15 0.44 0.56 1.2
hungry 0.91 -0.04 -0.07 0.84 0.16 1.0
tired 0.86 0.14 0.09 0.77 0.23 1.1
pain 0.90 0.05 0.00 0.81 0.19 1.0
nauseated 0.62 0.39 0.06 0.54 0.46 1.7
safe 0.71 0.31 0.15 0.62 0.38 1.5
love 0.41 0.70 0.02 0.66 0.34 1.6
recognizing -0.28 0.34 0.62 0.59 0.41 2.0
communicating 0.09 0.12 0.71 0.53 0.47 1.1
guilt 0.18 0.84 -0.04 0.73 0.27 1.1
disrespected 0.25 0.73 -0.01 0.60 0.40 1.2
free_will 0.72 0.17 0.14 0.56 0.44 1.2
choices 0.21 0.18 0.67 0.53 0.47 1.3
self_restraint 0.09 0.53 0.31 0.38 0.62 1.7
intentions 0.56 0.25 0.35 0.50 0.50 2.1
goal 0.16 0.13 0.67 0.50 0.50 1.2
conscious 0.75 0.22 0.15 0.63 0.37 1.3
self_aware 0.47 0.49 0.25 0.52 0.48 2.5
desires 0.67 0.42 0.14 0.64 0.36 1.8
embarrassed 0.17 0.79 -0.05 0.66 0.34 1.1
emo_recog 0.06 0.69 0.31 0.57 0.43 1.4
joy 0.58 0.59 0.11 0.69 0.31 2.1
morality -0.11 0.60 0.33 0.47 0.53 1.6
personality 0.21 0.61 0.32 0.52 0.48 1.8
pleasure 0.73 0.41 0.09 0.71 0.29 1.6
pride 0.27 0.80 -0.01 0.71 0.29 1.2
MR1 MR2 MR3
SS loadings 9.98 8.28 5.52
Proportion Var 0.25 0.21 0.14
Cumulative Var 0.25 0.46 0.59
Proportion Explained 0.42 0.35 0.23
Cumulative Proportion 0.42 0.77 1.00
Mean item complexity = 1.5
Test of the hypothesis that 3 factors are sufficient.
The degrees of freedom for the null model are 780 and the objective function was 33.07 with Chi Square of 12924.08
The degrees of freedom for the model are 663 and the objective function was 3.95
The root mean square of the residuals (RMSR) is 0.03
The df corrected root mean square of the residuals is 0.03
The harmonic number of observations is 406 with the empirical chi square 586.55 with prob < 0.98
The total number of observations was 406 with Likelihood Chi Square = 1534.4 with prob < 6.4e-71
Tucker Lewis Index of factoring reliability = 0.915
RMSEA index = 0.059 and the 90 % confidence intervals are 0.053 0.061
BIC = -2447.81
Fit based upon off diagonal values = 0.99
Measures of factor score adequacy
MR1 MR2 MR3
Correlation of scores with factors 0.98 0.97 0.96
Multiple R square of scores with factors 0.96 0.94 0.91
Minimum correlation of possible factor scores 0.93 0.88 0.83
back to TOC
Study 3
Design: 2 conditions (beetle, robot), within-subjects Date conducted: 2016-01-10
Exploratory factor analysis
Step 1: Run maximal EFA (without and with rotation)
Factor Analysis using method = minres
Call: fa(r = d3_all, nfactors = 13, rotate = "none", fm = "minres",
cor = chosenCorType)
Standardized loadings (pattern matrix) based upon correlation matrix
MR1 MR2 MR3 MR4 MR5 MR6 MR7 MR8 MR9 MR10 MR11
happy 0.86 0.00 -0.16 0.06 -0.13 -0.12 -0.03 -0.09 -0.09 0.12 -0.12
depressed 0.75 0.07 -0.33 0.20 -0.08 0.02 -0.05 -0.05 0.08 -0.05 0.07
fear 0.80 -0.33 0.09 -0.04 -0.08 0.01 -0.03 -0.04 0.03 0.06 0.00
angry 0.81 -0.08 -0.15 0.03 -0.16 0.01 0.03 0.02 -0.09 0.08 -0.02
calm 0.81 -0.07 0.04 -0.07 -0.12 -0.08 -0.04 -0.13 0.05 0.03 -0.09
sounds 0.32 0.29 0.57 0.24 0.00 -0.19 0.17 -0.13 -0.18 -0.06 0.00
seeing 0.40 0.11 0.52 0.11 0.07 -0.16 -0.01 -0.07 -0.10 -0.08 0.00
temperature 0.42 0.11 0.59 0.21 0.04 0.07 0.05 0.08 0.07 0.17 0.04
odors 0.53 -0.06 0.45 0.20 0.21 -0.05 -0.05 0.14 0.02 0.07 -0.04
depth 0.39 0.30 0.40 0.17 0.03 0.14 0.15 0.01 0.23 -0.14 -0.04
computations -0.40 0.73 -0.13 -0.03 -0.16 0.03 0.12 0.04 0.10 0.06 -0.02
thoughts 0.81 0.06 0.02 -0.20 -0.05 -0.17 0.11 0.02 0.03 -0.03 0.04
reasoning 0.38 0.63 0.06 -0.14 -0.07 -0.08 -0.04 -0.06 0.09 -0.05 0.11
remembering 0.24 0.60 0.27 0.00 -0.15 0.14 -0.03 0.06 -0.11 -0.02 0.08
beliefs 0.55 0.27 -0.31 0.03 0.23 0.19 0.16 -0.05 -0.09 0.03 -0.07
hungry 0.67 -0.60 0.21 0.07 0.12 0.03 -0.11 -0.03 0.04 -0.01 0.05
tired 0.77 -0.40 0.09 0.04 0.01 0.08 -0.09 -0.06 0.10 0.00 -0.04
pain 0.71 -0.53 0.20 0.05 0.06 0.00 -0.05 0.02 -0.01 -0.06 0.03
nauseated 0.78 -0.22 -0.06 0.12 -0.15 0.08 -0.01 -0.04 0.14 -0.14 0.05
safe 0.75 -0.24 0.10 -0.06 0.00 -0.08 -0.11 -0.02 -0.07 0.05 0.09
love 0.80 0.06 -0.22 0.08 -0.08 0.05 -0.04 -0.03 -0.07 -0.13 0.10
recognizing 0.22 0.71 0.17 0.03 -0.13 -0.18 -0.06 -0.02 0.07 0.00 -0.03
communicating 0.22 0.54 0.26 0.00 -0.01 0.05 -0.18 0.01 0.01 0.03 -0.03
guilt 0.66 0.19 -0.39 0.18 0.06 -0.04 0.02 0.07 0.01 0.07 0.17
disrespected 0.67 0.18 -0.38 0.19 0.07 0.08 0.07 0.01 -0.07 0.00 0.09
free_will 0.79 -0.21 0.07 -0.22 0.10 -0.02 0.11 -0.03 -0.06 -0.08 0.01
choices 0.52 0.29 0.34 -0.25 0.03 0.04 -0.07 -0.04 0.08 0.16 0.09
self_restraint 0.60 0.25 -0.14 -0.14 0.00 0.16 -0.01 -0.20 -0.04 -0.03 0.03
intentions 0.70 -0.02 0.18 -0.28 0.00 0.11 0.05 0.13 -0.06 0.01 0.09
goal 0.43 0.36 0.30 -0.02 -0.10 0.30 -0.11 0.10 -0.15 -0.07 -0.12
conscious 0.80 -0.19 0.08 -0.15 0.06 -0.05 0.10 0.02 0.04 -0.04 0.02
self_aware 0.74 0.00 0.00 -0.19 0.04 -0.12 0.11 0.08 0.08 -0.03 -0.13
desires 0.84 -0.22 0.08 -0.11 -0.06 0.10 0.11 0.12 -0.02 0.03 -0.01
embarrassed 0.63 0.16 -0.42 0.15 0.05 -0.14 0.02 0.17 -0.01 0.05 0.02
emo_recog 0.59 0.40 -0.16 -0.09 0.24 -0.11 -0.13 0.04 0.00 -0.04 -0.01
joy 0.84 -0.01 -0.19 0.10 -0.18 -0.03 0.05 -0.04 0.01 0.12 -0.06
morality 0.40 0.53 -0.15 -0.04 0.37 0.08 0.01 -0.17 0.05 0.08 -0.04
personality 0.68 0.32 -0.09 -0.08 0.00 -0.13 -0.07 0.14 -0.04 -0.12 -0.06
pleasure 0.84 -0.22 -0.02 0.02 -0.12 0.10 0.05 -0.02 0.00 0.06 -0.07
pride 0.71 0.17 -0.39 0.08 0.07 0.01 -0.12 0.07 0.03 -0.07 -0.14
MR12 MR13 h2 u2 com
happy 0.10 -0.06 0.86 0.14 1.3
depressed -0.05 0.00 0.75 0.25 1.7
fear 0.01 0.06 0.77 0.23 1.4
angry -0.01 0.02 0.73 0.27 1.2
calm -0.06 0.01 0.72 0.28 1.2
sounds 0.02 0.06 0.70 0.30 3.7
seeing -0.04 0.04 0.50 0.50 2.6
temperature 0.10 0.07 0.65 0.35 2.7
odors -0.01 -0.03 0.60 0.40 2.9
depth -0.01 -0.06 0.56 0.44 4.9
computations 0.15 0.07 0.80 0.20 2.0
thoughts -0.03 -0.03 0.76 0.24 1.3
reasoning 0.04 -0.03 0.60 0.40 2.0
remembering -0.07 -0.03 0.56 0.44 2.2
beliefs 0.00 0.02 0.60 0.40 3.2
hungry -0.01 -0.05 0.90 0.10 2.4
tired 0.06 0.05 0.81 0.19 1.7
pain 0.00 -0.05 0.84 0.16 2.1
nauseated 0.04 0.07 0.76 0.24 1.5
safe -0.03 0.06 0.68 0.32 1.4
love 0.14 -0.02 0.77 0.23 1.4
recognizing -0.10 -0.03 0.66 0.34 1.6
communicating -0.03 -0.01 0.44 0.56 2.2
guilt -0.04 -0.07 0.71 0.29 2.3
disrespected -0.14 0.06 0.71 0.29 2.3
free_will 0.12 0.09 0.78 0.22 1.5
choices -0.01 0.12 0.59 0.41 3.6
self_restraint -0.04 0.02 0.53 0.47 2.1
intentions -0.02 0.02 0.64 0.36 1.7
goal 0.01 -0.05 0.57 0.43 4.7
conscious 0.03 -0.11 0.75 0.25 1.3
self_aware -0.16 0.04 0.67 0.33 1.5
desires 0.01 -0.03 0.82 0.18 1.3
embarrassed 0.00 0.04 0.68 0.32 2.4
emo_recog 0.09 -0.08 0.66 0.34 2.8
joy 0.07 -0.11 0.83 0.17 1.3
morality 0.01 -0.06 0.66 0.34 3.4
personality 0.06 -0.01 0.64 0.36 1.8
pleasure -0.10 -0.06 0.81 0.19 1.3
pride 0.00 0.20 0.77 0.23 2.2
MR1 MR2 MR3 MR4 MR5 MR6 MR7 MR8 MR9 MR10 MR11 MR12
SS loadings 16.94 4.54 2.90 0.73 0.58 0.49 0.31 0.28 0.27 0.23 0.20 0.19
Proportion Var 0.42 0.11 0.07 0.02 0.01 0.01 0.01 0.01 0.01 0.01 0.01 0.00
Cumulative Var 0.42 0.54 0.61 0.63 0.64 0.65 0.66 0.67 0.68 0.68 0.69 0.69
Proportion Explained 0.61 0.16 0.10 0.03 0.02 0.02 0.01 0.01 0.01 0.01 0.01 0.01
Cumulative Proportion 0.61 0.77 0.88 0.90 0.92 0.94 0.95 0.96 0.97 0.98 0.99 0.99
MR13
SS loadings 0.17
Proportion Var 0.00
Cumulative Var 0.70
Proportion Explained 0.01
Cumulative Proportion 1.00
Mean item complexity = 2.2
Test of the hypothesis that 13 factors are sufficient.
The degrees of freedom for the null model are 780 and the objective function was 34.22 with Chi Square of 13170.85
The degrees of freedom for the model are 338 and the objective function was 1.01
The root mean square of the residuals (RMSR) is 0.01
The df corrected root mean square of the residuals is 0.02
The harmonic number of observations is 400 with the empirical chi square 61.88 with prob < 1
The total number of observations was 400 with Likelihood Chi Square = 381 with prob < 0.053
Tucker Lewis Index of factoring reliability = 0.992
RMSEA index = 0.022 and the 90 % confidence intervals are 0 0.027
BIC = -1644.12
Fit based upon off diagonal values = 1
Measures of factor score adequacy
MR1 MR2 MR3 MR4 MR5 MR6 MR7
Correlation of scores with factors 0.99 0.97 0.95 0.84 0.82 0.77 0.72
Multiple R square of scores with factors 0.99 0.94 0.90 0.71 0.67 0.59 0.51
Minimum correlation of possible factor scores 0.97 0.88 0.80 0.41 0.34 0.18 0.02
MR8 MR9 MR10 MR11 MR12 MR13
Correlation of scores with factors 0.68 0.68 0.67 0.65 0.65 0.63
Multiple R square of scores with factors 0.47 0.46 0.45 0.42 0.43 0.40
Minimum correlation of possible factor scores -0.06 -0.07 -0.10 -0.16 -0.14 -0.20
[1] 3
Step 2: Run EFA with varimax rotation
Factor Analysis using method = minres
Call: fa(r = d3_all, nfactors = nfactors_d3_all, rotate = chosenRotType,
fm = "minres", cor = chosenCorType)
Standardized loadings (pattern matrix) based upon correlation matrix
MR3 MR1 MR2 h2 u2 com
happy 0.54 0.66 0.17 0.76 0.24 2.1
depressed 0.37 0.73 0.06 0.68 0.32 1.5
fear 0.79 0.34 0.10 0.76 0.24 1.4
angry 0.56 0.60 0.11 0.69 0.31 2.1
calm 0.61 0.48 0.24 0.66 0.34 2.2
sounds 0.20 -0.04 0.65 0.47 0.53 1.2
seeing 0.36 -0.04 0.55 0.44 0.56 1.7
temperature 0.39 -0.07 0.60 0.52 0.48 1.8
odors 0.53 0.03 0.43 0.47 0.53 1.9
depth 0.19 0.11 0.59 0.39 0.61 1.3
computations -0.79 0.10 0.26 0.70 0.30 1.2
thoughts 0.52 0.55 0.31 0.66 0.34 2.6
reasoning -0.13 0.43 0.57 0.54 0.46 2.0
remembering -0.15 0.20 0.65 0.49 0.51 1.3
beliefs 0.11 0.65 0.14 0.46 0.54 1.2
hungry 0.92 0.08 -0.03 0.86 0.14 1.0
tired 0.83 0.30 0.05 0.77 0.23 1.3
pain 0.90 0.14 0.02 0.83 0.17 1.0
nauseated 0.66 0.47 0.07 0.66 0.34 1.8
safe 0.70 0.34 0.16 0.63 0.37 1.6
love 0.44 0.69 0.15 0.69 0.31 1.8
recognizing -0.26 0.30 0.65 0.58 0.42 1.8
communicating -0.12 0.17 0.60 0.41 0.59 1.3
guilt 0.21 0.76 0.07 0.63 0.37 1.2
disrespected 0.23 0.75 0.08 0.62 0.38 1.2
free_will 0.70 0.39 0.17 0.67 0.33 1.7
choices 0.27 0.23 0.58 0.46 0.54 1.8
self_restraint 0.20 0.57 0.26 0.44 0.56 1.7
intentions 0.54 0.33 0.33 0.52 0.48 2.4
goal 0.15 0.22 0.57 0.39 0.61 1.5
conscious 0.70 0.40 0.19 0.69 0.31 1.8
self_aware 0.50 0.48 0.24 0.54 0.46 2.4
desires 0.74 0.42 0.18 0.76 0.24 1.7
embarrassed 0.19 0.74 0.02 0.59 0.41 1.1
emo_recog 0.10 0.64 0.34 0.53 0.47 1.6
joy 0.52 0.67 0.14 0.74 0.26 2.0
morality -0.11 0.54 0.37 0.44 0.56 1.8
personality 0.23 0.62 0.36 0.57 0.43 1.9
pleasure 0.71 0.48 0.11 0.76 0.24 1.8
pride 0.25 0.77 0.07 0.67 0.33 1.2
MR3 MR1 MR2
SS loadings 10.13 9.03 4.92
Proportion Var 0.25 0.23 0.12
Cumulative Var 0.25 0.48 0.60
Proportion Explained 0.42 0.38 0.20
Cumulative Proportion 0.42 0.80 1.00
Mean item complexity = 1.6
Test of the hypothesis that 3 factors are sufficient.
The degrees of freedom for the null model are 780 and the objective function was 34.22 with Chi Square of 13170.85
The degrees of freedom for the model are 663 and the objective function was 3.61
The root mean square of the residuals (RMSR) is 0.03
The df corrected root mean square of the residuals is 0.03
The harmonic number of observations is 400 with the empirical chi square 508.77 with prob < 1
The total number of observations was 400 with Likelihood Chi Square = 1380.26 with prob < 1.3e-52
Tucker Lewis Index of factoring reliability = 0.932
RMSEA index = 0.054 and the 90 % confidence intervals are 0.048 0.056
BIC = -2592.08
Fit based upon off diagonal values = 1
Measures of factor score adequacy
MR3 MR1 MR2
Correlation of scores with factors 0.98 0.96 0.94
Multiple R square of scores with factors 0.96 0.93 0.88
Minimum correlation of possible factor scores 0.92 0.86 0.76
back to TOC
Study 4
Design: 21 conditions, between-subjects Date conducted: 2016-01-14
Demographics
Joining, by = c("condition", "min_age", "max_age", "median_age", "mean_age", "sd_age")
Column `condition` joining factor and character vector, coercing into character vector
back to TOC
Exploratory factor analysis
Step 1: Run maximal EFA (without and with rotation)
Factor Analysis using method = minres
Call: fa(r = d4_all, nfactors = 13, rotate = "none", fm = "minres",
cor = chosenCorType)
Standardized loadings (pattern matrix) based upon correlation matrix
MR1 MR2 MR3 MR4 MR5 MR6 MR7 MR8 MR9 MR10 MR11
happy 0.88 -0.07 -0.25 0.15 -0.15 0.05 -0.03 0.07 -0.03 0.09 0.05
depressed 0.81 0.17 -0.16 0.15 0.03 -0.24 0.00 -0.06 0.02 -0.07 -0.01
fear 0.84 -0.37 -0.13 -0.07 0.10 -0.01 0.00 0.04 -0.05 -0.01 0.00
angry 0.86 -0.07 -0.15 0.12 -0.04 -0.09 -0.06 -0.05 0.06 -0.07 -0.04
calm 0.85 -0.20 -0.15 -0.03 -0.02 0.03 -0.02 0.11 -0.08 0.09 0.00
sounds 0.71 -0.32 0.41 0.14 0.13 0.13 0.00 0.03 0.03 0.01 0.02
seeing 0.77 -0.33 0.28 0.07 0.12 0.04 -0.05 -0.01 0.03 -0.01 -0.01
temperature 0.65 -0.31 0.41 0.05 0.18 0.05 0.03 0.04 -0.01 0.02 -0.07
odors 0.79 -0.25 0.17 0.03 0.16 -0.04 0.05 -0.15 0.05 -0.02 -0.08
depth 0.71 -0.03 0.39 -0.11 0.03 -0.04 -0.10 0.03 0.11 0.08 -0.05
computations 0.22 0.57 0.46 0.16 0.03 0.06 -0.06 0.06 0.05 0.09 0.05
thoughts 0.85 0.00 -0.10 -0.08 -0.14 0.14 0.21 -0.21 0.05 -0.03 0.01
reasoning 0.73 0.36 0.22 -0.13 -0.10 0.01 0.07 -0.10 0.01 0.05 -0.01
remembering 0.75 0.06 0.42 0.12 -0.12 -0.10 -0.06 -0.08 0.04 0.01 0.02
beliefs 0.66 0.54 -0.11 -0.12 0.07 0.16 0.07 0.00 0.05 0.07 -0.02
hungry 0.78 -0.44 -0.15 -0.13 0.16 0.03 -0.02 -0.02 -0.02 -0.02 0.06
tired 0.85 -0.37 -0.15 0.03 0.06 -0.03 0.00 -0.02 -0.04 0.01 0.03
pain 0.81 -0.43 -0.17 -0.02 0.19 0.03 0.01 -0.08 -0.03 -0.05 0.07
nauseated 0.82 -0.12 -0.18 0.10 0.03 -0.13 -0.02 -0.04 0.05 0.10 -0.03
safe 0.85 -0.22 -0.11 -0.08 -0.04 0.02 0.03 0.21 -0.06 0.04 0.00
love 0.84 0.05 -0.26 0.15 -0.12 0.09 -0.03 0.02 0.00 -0.03 -0.01
recognizing 0.79 -0.04 0.24 0.33 -0.09 0.05 -0.01 -0.02 -0.01 0.02 0.09
communicating 0.75 -0.08 0.40 0.13 -0.15 0.03 0.12 0.12 -0.13 -0.18 -0.01
guilt 0.74 0.47 -0.18 0.09 0.14 -0.03 0.04 0.00 0.05 0.01 0.09
disrespected 0.73 0.43 -0.12 0.02 0.18 -0.04 0.01 0.07 -0.05 -0.11 0.01
free_will 0.82 -0.07 -0.04 -0.28 -0.07 0.02 -0.14 -0.02 0.04 -0.06 -0.04
choices 0.79 -0.03 0.33 -0.16 -0.07 -0.07 -0.08 0.01 -0.04 0.00 0.00
self_restraint 0.75 0.38 0.10 -0.09 0.05 -0.21 0.00 -0.06 -0.23 0.08 0.10
intentions 0.81 0.03 0.06 -0.26 -0.04 -0.07 0.00 0.11 0.13 0.01 -0.01
goal 0.67 0.10 0.32 -0.24 -0.09 -0.11 0.21 0.05 0.01 -0.05 0.05
conscious 0.82 -0.15 -0.06 -0.13 -0.03 0.10 0.08 -0.01 -0.04 0.02 0.06
self_aware 0.77 0.21 0.02 -0.24 -0.07 0.13 -0.23 -0.08 -0.01 -0.07 0.15
desires 0.87 -0.10 -0.12 -0.09 -0.08 -0.08 0.09 0.06 0.06 0.05 -0.10
embarrassed 0.70 0.50 -0.20 0.08 0.21 0.02 0.09 0.11 0.15 -0.03 0.09
emo_recog 0.77 0.34 -0.02 0.09 0.02 0.01 -0.09 -0.01 -0.04 -0.12 -0.05
joy 0.89 -0.04 -0.23 0.14 -0.15 0.02 0.02 -0.01 -0.03 0.10 0.00
morality 0.70 0.53 -0.01 -0.02 0.12 0.11 0.00 -0.08 -0.19 0.07 -0.19
personality 0.89 0.00 -0.12 0.14 -0.17 0.04 -0.02 -0.02 0.04 -0.07 -0.05
pleasure 0.90 -0.22 -0.15 0.03 -0.04 -0.04 -0.03 -0.03 0.05 0.07 0.01
pride 0.81 0.32 -0.16 -0.03 -0.03 0.01 -0.08 0.08 0.03 -0.08 -0.12
MR12 MR13 h2 u2 com
happy 0.01 -0.05 0.91 0.090 1.4
depressed 0.07 0.11 0.82 0.183 1.5
fear -0.03 0.06 0.88 0.117 1.5
angry -0.08 -0.08 0.82 0.181 1.2
calm 0.02 0.08 0.83 0.175 1.3
sounds -0.04 0.04 0.83 0.170 2.4
seeing -0.09 -0.06 0.82 0.183 1.8
temperature 0.18 -0.03 0.77 0.229 2.7
odors 0.00 -0.03 0.79 0.213 1.5
depth 0.11 -0.02 0.71 0.290 1.9
computations 0.02 0.05 0.64 0.360 2.6
thoughts 0.03 0.13 0.88 0.116 1.5
reasoning -0.05 -0.08 0.76 0.241 1.9
remembering -0.07 0.14 0.82 0.180 1.9
beliefs 0.02 0.01 0.81 0.193 2.3
hungry -0.05 0.00 0.88 0.120 1.9
tired -0.01 -0.04 0.90 0.104 1.5
pain 0.01 0.01 0.92 0.078 1.8
nauseated 0.08 -0.01 0.77 0.233 1.3
safe 0.00 0.13 0.86 0.141 1.4
love 0.06 -0.08 0.83 0.167 1.4
recognizing -0.05 -0.05 0.82 0.180 1.7
communicating 0.00 -0.02 0.85 0.153 2.1
guilt -0.04 0.01 0.84 0.163 2.0
disrespected -0.04 -0.06 0.80 0.204 2.0
free_will -0.03 0.07 0.79 0.206 1.4
choices -0.12 0.02 0.79 0.213 1.6
self_restraint 0.06 -0.01 0.85 0.153 2.1
intentions -0.07 -0.04 0.77 0.230 1.4
goal 0.04 -0.07 0.70 0.297 2.3
conscious 0.04 -0.05 0.73 0.266 1.2
self_aware 0.08 -0.04 0.82 0.185 1.8
desires -0.01 -0.07 0.84 0.163 1.2
embarrassed -0.04 0.03 0.89 0.109 2.5
emo_recog 0.07 0.00 0.75 0.250 1.6
joy -0.05 -0.03 0.90 0.103 1.3
morality -0.09 0.01 0.88 0.117 2.5
personality 0.06 0.03 0.86 0.135 1.2
pleasure -0.01 -0.02 0.89 0.113 1.2
pride 0.02 0.00 0.81 0.189 1.5
MR1 MR2 MR3 MR4 MR5 MR6 MR7 MR8 MR9 MR10 MR11 MR12
SS loadings 24.49 3.38 2.06 0.74 0.48 0.31 0.27 0.24 0.21 0.17 0.16 0.15
Proportion Var 0.61 0.08 0.05 0.02 0.01 0.01 0.01 0.01 0.01 0.00 0.00 0.00
Cumulative Var 0.61 0.70 0.75 0.77 0.78 0.79 0.79 0.80 0.80 0.81 0.81 0.82
Proportion Explained 0.75 0.10 0.06 0.02 0.01 0.01 0.01 0.01 0.01 0.01 0.01 0.00
Cumulative Proportion 0.75 0.85 0.91 0.93 0.95 0.96 0.97 0.97 0.98 0.99 0.99 1.00
MR13
SS loadings 0.14
Proportion Var 0.00
Cumulative Var 0.82
Proportion Explained 0.00
Cumulative Proportion 1.00
Mean item complexity = 1.7
Test of the hypothesis that 13 factors are sufficient.
The degrees of freedom for the null model are 780 and the objective function was 52.07 with Chi Square of 21651.8
The degrees of freedom for the model are 338 and the objective function was 1.29
The root mean square of the residuals (RMSR) is 0.01
The df corrected root mean square of the residuals is 0.01
The harmonic number of observations is 431 with the empirical chi square 34.49 with prob < 1
The total number of observations was 431 with Likelihood Chi Square = 526.8 with prob < 2e-10
Tucker Lewis Index of factoring reliability = 0.979
RMSEA index = 0.039 and the 90 % confidence intervals are 0.03 0.042
BIC = -1523.55
Fit based upon off diagonal values = 1
Measures of factor score adequacy
MR1 MR2 MR3 MR4 MR5 MR6 MR7
Correlation of scores with factors 1.00 0.98 0.96 0.89 0.88 0.80 0.77
Multiple R square of scores with factors 0.99 0.96 0.92 0.80 0.77 0.64 0.60
Minimum correlation of possible factor scores 0.99 0.91 0.83 0.60 0.55 0.28 0.19
MR8 MR9 MR10 MR11 MR12 MR13
Correlation of scores with factors 0.79 0.76 0.71 0.72 0.66 0.67
Multiple R square of scores with factors 0.62 0.59 0.51 0.51 0.44 0.45
Minimum correlation of possible factor scores 0.24 0.17 0.01 0.03 -0.12 -0.10
[1] 3
Step 2: Run EFA with varimax rotation
Factor Analysis using method = minres
Call: fa(r = d4_all, nfactors = nfactors_d4_all, rotate = chosenRotType,
fm = "minres", cor = chosenCorType)
Standardized loadings (pattern matrix) based upon correlation matrix
MR1 MR2 MR3 h2 u2 com
happy 0.74 0.48 0.23 0.84 0.16 1.9
depressed 0.52 0.62 0.23 0.70 0.30 2.2
fear 0.83 0.20 0.37 0.86 0.14 1.5
angry 0.68 0.46 0.31 0.76 0.24 2.2
calm 0.75 0.35 0.32 0.79 0.21 1.8
sounds 0.45 0.08 0.75 0.76 0.24 1.7
seeing 0.56 0.13 0.67 0.78 0.22 2.0
temperature 0.40 0.06 0.71 0.68 0.32 1.6
odors 0.58 0.22 0.58 0.72 0.28 2.3
depth 0.29 0.32 0.68 0.65 0.35 1.8
computations -0.40 0.51 0.39 0.58 0.42 2.8
thoughts 0.60 0.49 0.33 0.72 0.28 2.5
reasoning 0.17 0.66 0.48 0.70 0.30 2.0
remembering 0.26 0.41 0.71 0.74 0.26 1.9
beliefs 0.19 0.83 0.14 0.74 0.26 1.2
hungry 0.84 0.11 0.33 0.83 0.17 1.3
tired 0.85 0.21 0.36 0.89 0.11 1.5
pain 0.86 0.14 0.33 0.87 0.13 1.3
nauseated 0.70 0.40 0.27 0.71 0.29 1.9
safe 0.74 0.32 0.36 0.78 0.22 1.9
love 0.65 0.56 0.18 0.77 0.23 2.1
recognizing 0.43 0.38 0.59 0.67 0.33 2.6
communicating 0.35 0.30 0.71 0.71 0.29 1.8
guilt 0.31 0.82 0.13 0.79 0.21 1.3
disrespected 0.30 0.78 0.18 0.73 0.27 1.4
free_will 0.60 0.42 0.38 0.68 0.32 2.6
choices 0.38 0.37 0.67 0.73 0.27 2.2
self_restraint 0.24 0.71 0.38 0.70 0.30 1.8
intentions 0.49 0.47 0.44 0.66 0.34 3.0
goal 0.23 0.41 0.57 0.55 0.45 2.2
conscious 0.65 0.35 0.38 0.69 0.31 2.2
self_aware 0.38 0.60 0.35 0.63 0.37 2.4
desires 0.69 0.43 0.34 0.78 0.22 2.2
embarrassed 0.29 0.82 0.09 0.77 0.23 1.3
emo_recog 0.33 0.72 0.30 0.71 0.29 1.8
joy 0.72 0.51 0.25 0.84 0.16 2.1
morality 0.17 0.81 0.25 0.74 0.26 1.3
personality 0.64 0.52 0.33 0.80 0.20 2.5
pleasure 0.79 0.35 0.35 0.87 0.13 1.8
pride 0.43 0.74 0.20 0.78 0.22 1.8
MR1 MR2 MR3
SS loadings 12.24 10.06 7.40
Proportion Var 0.31 0.25 0.19
Cumulative Var 0.31 0.56 0.74
Proportion Explained 0.41 0.34 0.25
Cumulative Proportion 0.41 0.75 1.00
Mean item complexity = 1.9
Test of the hypothesis that 3 factors are sufficient.
The degrees of freedom for the null model are 780 and the objective function was 52.07 with Chi Square of 21651.8
The degrees of freedom for the model are 663 and the objective function was 5.44
The root mean square of the residuals (RMSR) is 0.02
The df corrected root mean square of the residuals is 0.03
The harmonic number of observations is 431 with the empirical chi square 406.4 with prob < 1
The total number of observations was 431 with Likelihood Chi Square = 2251.71 with prob < 1e-171
Tucker Lewis Index of factoring reliability = 0.91
RMSEA index = 0.077 and the 90 % confidence intervals are 0.071 0.078
BIC = -1770.12
Fit based upon off diagonal values = 1
Measures of factor score adequacy
MR1 MR2 MR3
Correlation of scores with factors 0.98 0.97 0.95
Multiple R square of scores with factors 0.95 0.95 0.91
Minimum correlation of possible factor scores 0.91 0.90 0.81
back to TOC
Big factor loadings table for all studies (Studies 1-4)
Joining, by = "mc"
Joining, by = "mc"
Joining, by = "mc"
LS0tCnRpdGxlOiAiQm9keSwgSGVhcnQsICYgTWluZCAoV2Vpc21hbiwgRHdlY2ssICYgTWFya21hbiwgc3VibWl0dGVkKSIKb3V0cHV0OgogIGh0bWxfbm90ZWJvb2s6CiAgICB0aGVtZTogZmxhdGx5CiAgICB0b2M6IHllcwogIGh0bWxfZG9jdW1lbnQ6CiAgICB0b2M6IHllcwogIHBkZl9kb2N1bWVudDoKICAgIHRvYzogeWVzCi0tLQoKYGBge3IgZ2xvYmFsX29wdGlvbnMsIGluY2x1ZGUgPSBGQUxTRX0Ka25pdHI6Om9wdHNfY2h1bmskc2V0KGVjaG8gPSBGQUxTRSwgd2FybmluZyA9IEZBTFNFLCBtZXNzYWdlID0gRkFMU0UpCmBgYAoKIyBTZXR1cAoKYGBge3Igd29ya3NwYWNlIHNldHVwfQojIGxvYWQgbGlicmFyaWVzCmxpYnJhcnkodGlkeXZlcnNlKQpsaWJyYXJ5KHBzeWNoKQpsaWJyYXJ5KGxhbmdjb2cpICMgc291cmNlOiBodHRwczovL2dpdGh1Yi5jb20vbGFuZ2NvZy9sYW5nY29nCmxpYnJhcnkocm1zKQpsaWJyYXJ5KHNjYXR0ZXJwbG90M2QpCmxpYnJhcnkobGF0dGljZSkKbGlicmFyeShkaXJlY3RsYWJlbHMpCmxpYnJhcnkocGxvdGx5KQpsaWJyYXJ5KFJDb2xvckJyZXdlcikKCiMgY2xlYXIgd29ya3NwYWNlCiMgcm0obGlzdCA9IGxzKGFsbCA9IFQpKQojIGdyYXBoaWNzLm9mZigpCmBgYAoKYGBge3IgZnVuY3Rpb25zfQojIG1ha2Ugcm91bmRpbmcgZnVuY3Rpb24Kcm91bmQyIDwtIGZ1bmN0aW9uKHgpIHtmb3JtYXQocm91bmQoeCwgMiksIG5zbWFsbCA9IDIpfQoKIyBtYWtlIGNsZWFudXAgZnVuY3Rpb24KY2xlYW51cCA8LSBmdW5jdGlvbihkYXRhc291cmNlKSB7CiAgaWYoZGF0YXNvdXJjZSAlaW4lIGMoInN0dWR5IDEiLCAic3R1ZHkgMiIpKSB7CiAgICAKICAgICMgc2V0IHRhcmdldCBkYXRhc2V0CiAgICBpZihkYXRhc291cmNlID09ICJzdHVkeSAxIil7ZCA8LSBkX3Jhd19zdHVkeTF9CiAgICBpZihkYXRhc291cmNlID09ICJzdHVkeSAyIil7ZCA8LSBkX3Jhd19zdHVkeTJ9CiAgICAKICAgICMgZW5hY3QgZXhjbHVzaW9uYXJ5IGNyaXRlcmlhCiAgICBkX2NsZWFuXzEgPC0gZCAlPiUKICAgICAgbXV0YXRlKGZpbmlzaGVkX21vZCA9IGlmZWxzZShpcy5uYShDQVRDSCksIDAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWZlbHNlKGZpbmlzaGVkID09IDEsIDEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAuNSkpKSAlPiUKICAgICAgZmlsdGVyKENBVENIID09IDEsICMgZXhjbHVkZSBQcyB3aG8gZmFpbCBjYXRjaCB0cmlhbHMgCiAgICAgICAgICAgICBmaW5pc2hlZF9tb2QgIT0gMCkgJT4lICMgZXhjbHVkZSBQcyB3aG8gZGlkIG5vdCBjb21wbGV0ZSB0YXNrCiAgICAgIG11dGF0ZSh5b2JfY29ycmVjdCA9IGFzLm51bWVyaWMoCiAgICAgICAgaWZlbHNlKGFzLm51bWVyaWMoYXMuY2hhcmFjdGVyKHlvYikpID4gMTkwMCAmIAogICAgICAgICAgICAgICAgIGFzLm51bWVyaWMoYXMuY2hhcmFjdGVyKHlvYikpIDwgMjAwMCwgCiAgICAgICAgICAgICAgIGFzLm51bWVyaWMoYXMuY2hhcmFjdGVyKHlvYikpLCBOQSkpLCAjIGNvcnJlY3QgZm9ybWF0dGluZyBpbiB5b2IKICAgICAgICBhZ2VfYXBwcm94ID0gMjAxNiAtIHlvYl9jb3JyZWN0KSAlPiUgIyBjYWxjdWxhdGUgYXBwcm94aW1hdGUgYWdlCiAgICAgIG11dGF0ZShnZW5kZXIgPSBmYWN0b3IoZ2VuZGVyLCBsZXZlbHMgPSBjKDEsIDIsIDApLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYWJlbHMgPSBjKCJtIiwgImYiLCAib3RoZXIiKSkpICU+JQogICAgICBmaWx0ZXIoYWdlX2FwcHJveCA+PSAxOCkgIyBleGNsdWRlIFBzIHdobyBhcmUgeW91bmdlciB0aGFuIDE4IHllYXJzCiAgICAKICAgICMgcmVjb2RlIGJhY2tncm91bmQgYW5kIGRlbW9ncmFwaGljIHZhcmlhYmxlcwogICAgZF9jbGVhbiA8LSBkX2NsZWFuXzEgJT4lCiAgICAgIG11dGF0ZSggIyBkZWFsIHdpdGggc3R1ZHkgbnVtYmVyCiAgICAgICAgc3R1ZHkgPSBmYWN0b3Ioc3R1ZHkpKSAlPiUKICAgICAgbXV0YXRlKCAjIGRlYWwgd2l0aCBzdHVkeSBkdXJhdGlvbgogICAgICAgIGR1cmF0aW9uID0gYXMubnVtZXJpYyhkaWZmdGltZShzdHJwdGltZShlbmRfdGltZSwgIiVJOiVNOiVTIiksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnB0aW1lKHN0YXJ0X3RpbWUsICIlSTolTTolUyIpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bml0cyA9ICJtaW5zIikpKSAlPiUKICAgICAgbXV0YXRlKCAjIGRlYWwgd2l0aCByYWNlCiAgICAgICAgcmFjZV9hc2lhbl9lYXN0ID0gCiAgICAgICAgICBmYWN0b3IoaWZlbHNlKGlzLm5hKHJhY2VfYXNpYW5fZWFzdCksICIiLCAiYXNpYW5fZWFzdCAiKSksCiAgICAgICAgcmFjZV9hc2lhbl9zb3V0aCA9IAogICAgICAgICAgZmFjdG9yKGlmZWxzZShpcy5uYShyYWNlX2FzaWFuX3NvdXRoKSwgIiIsICJhc2lhbl9zb3V0aCAiKSksCiAgICAgICAgcmFjZV9hc2lhbl9vdGhlciA9IAogICAgICAgICAgZmFjdG9yKGlmZWxzZShpcy5uYShyYWNlX2FzaWFuX290aGVyKSwgIiIsICJhc2lhbl9vdGhlciAiKSksCiAgICAgICAgcmFjZV9ibGFjayA9IAogICAgICAgICAgZmFjdG9yKGlmZWxzZShpcy5uYShyYWNlX2JsYWNrKSwgIiIsICJibGFjayAiKSksCiAgICAgICAgcmFjZV9oaXNwYW5pYyA9IAogICAgICAgICAgZmFjdG9yKGlmZWxzZShpcy5uYShyYWNlX2hpc3BhbmljKSwgIiIsICJoaXNwYW5pYyAiKSksCiAgICAgICAgcmFjZV9taWRkbGVfZWFzdGVybiA9IAogICAgICAgICAgZmFjdG9yKGlmZWxzZShpcy5uYShyYWNlX21pZGRsZV9lYXN0ZXJuKSwgIiIsICJtaWRkbGVfZWFzdGVybiAiKSksCiAgICAgICAgcmFjZV9uYXRpdmVfYW1lcmljYW4gPSAKICAgICAgICAgIGZhY3RvcihpZmVsc2UoaXMubmEocmFjZV9uYXRpdmVfYW1lcmljYW4pLCAiIiwgIm5hdGl2ZV9hbWVyaWNhbiAiKSksCiAgICAgICAgcmFjZV9wYWNfaXNsYW5kZXIgPSAKICAgICAgICAgIGZhY3RvcihpZmVsc2UoaXMubmEocmFjZV9wYWNfaXNsYW5kZXIpLCAiIiwgInBhY19pc2xhbmRlciAiKSksCiAgICAgICAgcmFjZV93aGl0ZSA9IAogICAgICAgICAgZmFjdG9yKGlmZWxzZShpcy5uYShyYWNlX3doaXRlKSwgIiIsICJ3aGl0ZSAiKSksCiAgICAgICAgcmFjZV9vdGhlcl9wcmVmbm8gPSAKICAgICAgICAgIGZhY3RvcihpZmVsc2UoaXMubmEocmFjZV9vdGhlcl9wcmVmbm8pLCAiIiwgIm90aGVyX3ByZWZubyAiKSksCiAgICAgICAgcmFjZV9jYXQgPSBwYXN0ZTAocmFjZV9hc2lhbl9lYXN0LCByYWNlX2FzaWFuX3NvdXRoLCByYWNlX2FzaWFuX290aGVyLAogICAgICAgICAgICAgICAgICAgICAgICAgIHJhY2VfYmxhY2ssIHJhY2VfaGlzcGFuaWMsIHJhY2VfbWlkZGxlX2Vhc3Rlcm4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgcmFjZV9uYXRpdmVfYW1lcmljYW4sIHJhY2VfcGFjX2lzbGFuZGVyLCByYWNlX3doaXRlLAogICAgICAgICAgICAgICAgICAgICAgICAgIHJhY2Vfb3RoZXJfcHJlZm5vKSwKICAgICAgICByYWNlX2NhdDIgPSBmYWN0b3Ioc3ViKCIgKyQiLCAiIiwgcmFjZV9jYXQpKSwKICAgICAgICByYWNlX2NhdDMgPSBmYWN0b3IoaWZlbHNlKGdyZXBsKCIgIiwgcmFjZV9jYXQyKSA9PSBULCAibXVsdGlyYWNpYWwiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXMuY2hhcmFjdGVyKHJhY2VfY2F0MikpKSkgJT4lCiAgICAgIGRwbHlyOjpzZWxlY3Qoc3R1ZHksIHN1YmlkOmVuZF90aW1lLCBkdXJhdGlvbiwgZmluaXNoZWQ6Z2VuZGVyLCAKICAgICAgICAgICAgIHJlbGlnaW9uX2J1ZGRoaXNtOmFnZV9hcHByb3gsIHJhY2VfY2F0MykgJT4lCiAgICAgIHJlbmFtZShyYWNlX2NhdCA9IHJhY2VfY2F0MykgJT4lCiAgICAgIG11dGF0ZSggIyBkZWFsIHdpdGggcmVsaWdpb24KICAgICAgICByZWxpZ2lvbl9idWRkaGlzbSA9IAogICAgICAgICAgZmFjdG9yKGlmZWxzZShpcy5uYShyZWxpZ2lvbl9idWRkaGlzbSksICIiLCAiYnVkZGhpc20gIikpLAogICAgICAgIHJlbGlnaW9uX2NocmlzdGlhbml0eSA9IAogICAgICAgICAgZmFjdG9yKGlmZWxzZShpcy5uYShyZWxpZ2lvbl9jaHJpc3RpYW5pdHkpLCAiIiwgImNocmlzdGlhbml0eSAiKSksCiAgICAgICAgcmVsaWdpb25faGluZHVpc20gPSAKICAgICAgICAgIGZhY3RvcihpZmVsc2UoaXMubmEocmVsaWdpb25faGluZHVpc20pLCAiIiwgImhpbmR1aXNtICIpKSwKICAgICAgICByZWxpZ2lvbl9pc2xhbSA9IAogICAgICAgICAgZmFjdG9yKGlmZWxzZShpcy5uYShyZWxpZ2lvbl9pc2xhbSksICIiLCAiaXNsYW0gIikpLAogICAgICAgIHJlbGlnaW9uX2phaW5pc20gPSAKICAgICAgICAgIGZhY3RvcihpZmVsc2UoaXMubmEocmVsaWdpb25famFpbmlzbSksICIiLCAiamFpbmlzbSAiKSksCiAgICAgICAgcmVsaWdpb25fanVkYWlzbSA9IAogICAgICAgICAgZmFjdG9yKGlmZWxzZShpcy5uYShyZWxpZ2lvbl9qdWRhaXNtKSwgIiIsICJqdWRhaXNtICIpKSwKICAgICAgICByZWxpZ2lvbl9zaWtoaXNtID0gCiAgICAgICAgICBmYWN0b3IoaWZlbHNlKGlzLm5hKHJlbGlnaW9uX3Npa2hpc20pLCAiIiwgInNpa2hpc20gIikpLAogICAgICAgIHJlbGlnaW9uX290aGVyID0gCiAgICAgICAgICBmYWN0b3IoaWZlbHNlKGlzLm5hKHJlbGlnaW9uX290aGVyKSwgIiIsICJvdGhlciAiKSksCiAgICAgICAgcmVsaWdpb25fbm9uZSA9IAogICAgICAgICAgZmFjdG9yKGlmZWxzZShpcy5uYShyZWxpZ2lvbl9ub25lKSwgIiIsICJub25lICIpKSwKICAgICAgICByZWxpZ2lvbl9wcmVmbm8gPSAKICAgICAgICAgIGZhY3RvcihpZmVsc2UoaXMubmEocmVsaWdpb25fcHJlZm5vKSwgIiIsICJvdGhlcl9wcmVmbm8gIikpLAogICAgICAgIHJlbGlnaW9uX2NhdCA9IHBhc3RlMChyZWxpZ2lvbl9idWRkaGlzbSwgcmVsaWdpb25fY2hyaXN0aWFuaXR5LCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVsaWdpb25faGluZHVpc20sIHJlbGlnaW9uX2lzbGFtLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVsaWdpb25famFpbmlzbSwgcmVsaWdpb25fanVkYWlzbSwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlbGlnaW9uX3Npa2hpc20sIHJlbGlnaW9uX290aGVyLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVsaWdpb25fbm9uZSwgcmVsaWdpb25fcHJlZm5vKSwKICAgICAgICByZWxpZ2lvbl9jYXQyID0gZmFjdG9yKHN1YigiICskIiwgIiIsIHJlbGlnaW9uX2NhdCkpLAogICAgICAgIHJlbGlnaW9uX2NhdDMgPSBmYWN0b3IoaWZlbHNlKGdyZXBsKCIgIiwgcmVsaWdpb25fY2F0MikgPT0gVCwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm11bHRpcmVsaWdpb3VzIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcy5jaGFyYWN0ZXIocmVsaWdpb25fY2F0MikpKSkgJT4lCiAgICAgIGRwbHlyOjpzZWxlY3Qoc3R1ZHk6Z2VuZGVyLCBmZWVkYmFjazpyYWNlX2NhdCwgcmVsaWdpb25fY2F0MykgJT4lCiAgICAgIHJlbmFtZShyZWxpZ2lvbl9jYXQgPSByZWxpZ2lvbl9jYXQzKQogICAgCiAgICAjIHJlbW92ZSBleHRyYW5lb3VzIGRmcyBhbmQgdmFyaWFibGVzCiAgICBybShkLCBkX2NsZWFuXzEpCiAgfQogIAogIGlmKGRhdGFzb3VyY2UgPT0gInN0dWR5IDMiKSB7CiAgICAKICAgICMgc2V0IHRhcmdldCBkYXRhc2V0CiAgICBkIDwtIGRfcmF3X3N0dWR5MwogICAgCiAgICAjIGVuYWN0IGV4Y2x1c2lvbmFyeSBjcml0ZXJpYQogICAgZF9jbGVhbl8xIDwtIGQgJT4lCiAgICAgIG11dGF0ZShmaW5pc2hlZF9tb2QgPSBpZmVsc2UoaXMubmEoQ0FUQ0guLmNoYXJhY3RlckwpIHwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpcy5uYShDQVRDSC4uY2hhcmFjdGVyUiksIDAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWZlbHNlKGZpbmlzaGVkID09IDEsIDEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAuNSkpKSAlPiUKICAgICAgZmlsdGVyKENBVENILi5jaGFyYWN0ZXJMID09IDUsICMgZXhjbHVkZSBQcyB3aG8gZmFpbCBjYXRjaCB0cmlhbHMgCiAgICAgICAgICAgICBDQVRDSC4uY2hhcmFjdGVyUiA9PSA1LAogICAgICAgICAgICAgZmluaXNoZWRfbW9kICE9IDApICU+JSAjIGV4Y2x1ZGUgUHMgd2hvIGRpZCBub3QgY29tcGxldGUgdGFzawogICAgICBtdXRhdGUoeW9iX2NvcnJlY3QgPSBhcy5udW1lcmljKAogICAgICAgIGlmZWxzZShhcy5udW1lcmljKGFzLmNoYXJhY3Rlcih5b2IpKSA+IDE5MDAgJiAKICAgICAgICAgICAgICAgICBhcy5udW1lcmljKGFzLmNoYXJhY3Rlcih5b2IpKSA8IDIwMDAsIAogICAgICAgICAgICAgICBhcy5udW1lcmljKGFzLmNoYXJhY3Rlcih5b2IpKSwgTkEpKSwgIyBjb3JyZWN0IGZvcm1hdHRpbmcgaW4geW9iCiAgICAgICAgYWdlX2FwcHJveCA9IDIwMTYgLSB5b2JfY29ycmVjdCkgJT4lICMgY2FsY3VsYXRlIGFwcHJveGltYXRlIGFnZQogICAgICBtdXRhdGUoZ2VuZGVyID0gZmFjdG9yKGdlbmRlciwgbGV2ZWxzID0gYygxLCAyLCAwKSwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWxzID0gYygibSIsICJmIiwgIm90aGVyIikpKSAlPiUKICAgICAgZmlsdGVyKGFnZV9hcHByb3ggPj0gMTgpICMgZXhjbHVkZSBQcyB3aG8gYXJlIHlvdW5nZXIgdGhhbiAxOCB5ZWFycwogICAgCiAgICAjIHJlY29kZSBiYWNrZ3JvdW5kIGFuZCBkZW1vZ3JhcGhpYyB2YXJpYWJsZXMKICAgIGRfY2xlYW5fMiA8LSBkX2NsZWFuXzEgJT4lCiAgICAgIG11dGF0ZSggIyBkZWFsIHdpdGggc3R1ZHkgbnVtYmVyCiAgICAgICAgc3R1ZHkgPSBmYWN0b3Ioc3R1ZHkpKSAlPiUKICAgICAgbXV0YXRlKCAjIGRlYWwgd2l0aCBzdHVkeSBkdXJhdGlvbgogICAgICAgIGR1cmF0aW9uID0gYXMubnVtZXJpYyhkaWZmdGltZShzdHJwdGltZShlbmRfdGltZSwgIiVJOiVNOiVTIiksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnB0aW1lKHN0YXJ0X3RpbWUsICIlSTolTTolUyIpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bml0cyA9ICJtaW5zIikpKSAlPiUKICAgICAgbXV0YXRlKCAjIGRlYWwgd2l0aCByYWNlCiAgICAgICAgcmFjZV9hc2lhbl9lYXN0ID0gCiAgICAgICAgICBmYWN0b3IoaWZlbHNlKGlzLm5hKHJhY2VfYXNpYW5fZWFzdCksICIiLCAiYXNpYW5fZWFzdCAiKSksCiAgICAgICAgcmFjZV9hc2lhbl9zb3V0aCA9IAogICAgICAgICAgZmFjdG9yKGlmZWxzZShpcy5uYShyYWNlX2FzaWFuX3NvdXRoKSwgIiIsICJhc2lhbl9zb3V0aCAiKSksCiAgICAgICAgcmFjZV9hc2lhbl9vdGhlciA9IAogICAgICAgICAgZmFjdG9yKGlmZWxzZShpcy5uYShyYWNlX2FzaWFuX290aGVyKSwgIiIsICJhc2lhbl9vdGhlciAiKSksCiAgICAgICAgcmFjZV9ibGFjayA9IAogICAgICAgICAgZmFjdG9yKGlmZWxzZShpcy5uYShyYWNlX2JsYWNrKSwgIiIsICJibGFjayAiKSksCiAgICAgICAgcmFjZV9oaXNwYW5pYyA9IAogICAgICAgICAgZmFjdG9yKGlmZWxzZShpcy5uYShyYWNlX2hpc3BhbmljKSwgIiIsICJoaXNwYW5pYyAiKSksCiAgICAgICAgcmFjZV9taWRkbGVfZWFzdGVybiA9IAogICAgICAgICAgZmFjdG9yKGlmZWxzZShpcy5uYShyYWNlX21pZGRsZV9lYXN0ZXJuKSwgIiIsICJtaWRkbGVfZWFzdGVybiAiKSksCiAgICAgICAgcmFjZV9uYXRpdmVfYW1lcmljYW4gPSAKICAgICAgICAgIGZhY3RvcihpZmVsc2UoaXMubmEocmFjZV9uYXRpdmVfYW1lcmljYW4pLCAiIiwgIm5hdGl2ZV9hbWVyaWNhbiAiKSksCiAgICAgICAgcmFjZV9wYWNfaXNsYW5kZXIgPSAKICAgICAgICAgIGZhY3RvcihpZmVsc2UoaXMubmEocmFjZV9wYWNfaXNsYW5kZXIpLCAiIiwgInBhY19pc2xhbmRlciAiKSksCiAgICAgICAgcmFjZV93aGl0ZSA9IAogICAgICAgICAgZmFjdG9yKGlmZWxzZShpcy5uYShyYWNlX3doaXRlKSwgIiIsICJ3aGl0ZSAiKSksCiAgICAgICAgcmFjZV9vdGhlcl9wcmVmbm8gPSAKICAgICAgICAgIGZhY3RvcihpZmVsc2UoaXMubmEocmFjZV9vdGhlcl9wcmVmbm8pLCAiIiwgIm90aGVyX3ByZWZubyAiKSksCiAgICAgICAgcmFjZV9jYXQgPSBwYXN0ZTAocmFjZV9hc2lhbl9lYXN0LCByYWNlX2FzaWFuX3NvdXRoLCByYWNlX2FzaWFuX290aGVyLAogICAgICAgICAgICAgICAgICAgICAgICAgIHJhY2VfYmxhY2ssIHJhY2VfaGlzcGFuaWMsIHJhY2VfbWlkZGxlX2Vhc3Rlcm4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgcmFjZV9uYXRpdmVfYW1lcmljYW4sIHJhY2VfcGFjX2lzbGFuZGVyLCByYWNlX3doaXRlLAogICAgICAgICAgICAgICAgICAgICAgICAgIHJhY2Vfb3RoZXJfcHJlZm5vKSwKICAgICAgICByYWNlX2NhdDIgPSBmYWN0b3Ioc3ViKCIgKyQiLCAiIiwgcmFjZV9jYXQpKSwKICAgICAgICByYWNlX2NhdDMgPSBmYWN0b3IoaWZlbHNlKGdyZXBsKCIgIiwgcmFjZV9jYXQyKSA9PSBULCAibXVsdGlyYWNpYWwiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXMuY2hhcmFjdGVyKHJhY2VfY2F0MikpKSkgJT4lCiAgICAgIGRwbHlyOjpzZWxlY3Qoc3R1ZHksIHN1YmlkOmVuZF90aW1lLCBkdXJhdGlvbiwgZmluaXNoZWQ6Z2VuZGVyLCAKICAgICAgICAgICAgIHJlbGlnaW9uX2J1ZGRoaXNtOmFnZV9hcHByb3gsIHJhY2VfY2F0MykgJT4lCiAgICAgIHJlbmFtZShyYWNlX2NhdCA9IHJhY2VfY2F0MykgJT4lCiAgICAgIG11dGF0ZSggIyBkZWFsIHdpdGggcmVsaWdpb24KICAgICAgICByZWxpZ2lvbl9idWRkaGlzbSA9IAogICAgICAgICAgZmFjdG9yKGlmZWxzZShpcy5uYShyZWxpZ2lvbl9idWRkaGlzbSksICIiLCAiYnVkZGhpc20gIikpLAogICAgICAgIHJlbGlnaW9uX2NocmlzdGlhbml0eSA9IAogICAgICAgICAgZmFjdG9yKGlmZWxzZShpcy5uYShyZWxpZ2lvbl9jaHJpc3RpYW5pdHkpLCAiIiwgImNocmlzdGlhbml0eSAiKSksCiAgICAgICAgcmVsaWdpb25faGluZHVpc20gPSAKICAgICAgICAgIGZhY3RvcihpZmVsc2UoaXMubmEocmVsaWdpb25faGluZHVpc20pLCAiIiwgImhpbmR1aXNtICIpKSwKICAgICAgICByZWxpZ2lvbl9pc2xhbSA9IAogICAgICAgICAgZmFjdG9yKGlmZWxzZShpcy5uYShyZWxpZ2lvbl9pc2xhbSksICIiLCAiaXNsYW0gIikpLAogICAgICAgIHJlbGlnaW9uX2phaW5pc20gPSAKICAgICAgICAgIGZhY3RvcihpZmVsc2UoaXMubmEocmVsaWdpb25famFpbmlzbSksICIiLCAiamFpbmlzbSAiKSksCiAgICAgICAgcmVsaWdpb25fanVkYWlzbSA9IAogICAgICAgICAgZmFjdG9yKGlmZWxzZShpcy5uYShyZWxpZ2lvbl9qdWRhaXNtKSwgIiIsICJqdWRhaXNtICIpKSwKICAgICAgICByZWxpZ2lvbl9zaWtoaXNtID0gCiAgICAgICAgICBmYWN0b3IoaWZlbHNlKGlzLm5hKHJlbGlnaW9uX3Npa2hpc20pLCAiIiwgInNpa2hpc20gIikpLAogICAgICAgIHJlbGlnaW9uX290aGVyID0gCiAgICAgICAgICBmYWN0b3IoaWZlbHNlKGlzLm5hKHJlbGlnaW9uX290aGVyKSwgIiIsICJvdGhlciAiKSksCiAgICAgICAgcmVsaWdpb25fbm9uZSA9IAogICAgICAgICAgZmFjdG9yKGlmZWxzZShpcy5uYShyZWxpZ2lvbl9ub25lKSwgIiIsICJub25lICIpKSwKICAgICAgICByZWxpZ2lvbl9wcmVmbm8gPSAKICAgICAgICAgIGZhY3RvcihpZmVsc2UoaXMubmEocmVsaWdpb25fcHJlZm5vKSwgIiIsICJvdGhlcl9wcmVmbm8gIikpLAogICAgICAgIHJlbGlnaW9uX2NhdCA9IHBhc3RlMChyZWxpZ2lvbl9idWRkaGlzbSwgcmVsaWdpb25fY2hyaXN0aWFuaXR5LCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVsaWdpb25faGluZHVpc20sIHJlbGlnaW9uX2lzbGFtLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVsaWdpb25famFpbmlzbSwgcmVsaWdpb25fanVkYWlzbSwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlbGlnaW9uX3Npa2hpc20sIHJlbGlnaW9uX290aGVyLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVsaWdpb25fbm9uZSwgcmVsaWdpb25fcHJlZm5vKSwKICAgICAgICByZWxpZ2lvbl9jYXQyID0gZmFjdG9yKHN1YigiICskIiwgIiIsIHJlbGlnaW9uX2NhdCkpLAogICAgICAgIHJlbGlnaW9uX2NhdDMgPSBmYWN0b3IoaWZlbHNlKGdyZXBsKCIgIiwgcmVsaWdpb25fY2F0MikgPT0gVCwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm11bHRpcmVsaWdpb3VzIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcy5jaGFyYWN0ZXIocmVsaWdpb25fY2F0MikpKSkgJT4lCiAgICAgIGRwbHlyOjpzZWxlY3Qoc3R1ZHk6Z2VuZGVyLCBmZWVkYmFjazpyYWNlX2NhdCwgcmVsaWdpb25fY2F0MykgJT4lCiAgICAgIHJlbmFtZShyZWxpZ2lvbl9jYXQgPSByZWxpZ2lvbl9jYXQzKQogICAgCiAgICAjIHJlbmFtZSByZXNwb25zZSB2YXJpYWJsZXMKICAgIGRfY2xlYW5fMyA8LSBkX2NsZWFuXzIKICAgIG5hbWVzKGRfY2xlYW5fMykgPC0gZ3N1YigiZ2V0IiwgIiIsIG5hbWVzKGRfY2xlYW5fMykpCiAgICBuYW1lcyhkX2NsZWFuXzMpIDwtIGdzdWIoIlxcLiIsICIiLCBuYW1lcyhkX2NsZWFuXzMpKQogICAgbmFtZXMoZF9jbGVhbl8zKSA8LSBnc3ViKCJjaGFyIiwgIl9jaGFyIiwgbmFtZXMoZF9jbGVhbl8zKSkKICAgIG5hbWVzKGRfY2xlYW5fMylbbmFtZXMoZF9jbGVhbl8zKSAlaW4lIGMoIl9jaGFyYWN0ZXJMIiwgIl9jaGFyYWN0ZXJSIildIDwtIAogICAgICBjKCJjaGFyYWN0ZXJMIiwgImNoYXJhY3RlclIiKQogICAgCiAgICAjIHJlY29kZSByZXNwb25zZSB2YXJpYWJsZXMgKGNlbnRlcikKICAgIGRfY2xlYW5fNCA8LSBkX2NsZWFuXzMKICAgIGZvcihpIGluIDExOjkyKSB7CiAgICAgIGRfY2xlYW5fNFssaV0gPC0gZF9jbGVhbl80WyxpXSAtIDQgIyB0cmFuc2Zvcm0gZnJvbSAxIHRvIDcgLS0+IC0zIHRvIDMKICAgIH0KICAgIAogICAgIyByZWNvZGUgY2hhcmFjdGVyTCB2cy4gY2hhcmFjdGVyUiBhcyBiZWV0bGUgdnMuIHJvYm90CiAgICBkX2NsZWFuXzVfZGVtbyA8LSBkX2NsZWFuXzQgJT4lCiAgICAgIGRwbHlyOjpzZWxlY3Qoc3R1ZHk6Y29uZGl0aW9uLCB5b2I6cmVsaWdpb25fY2F0KQogICAgCiAgICBkX2NsZWFuXzVfY2hhcmFjdGVyTCA8LSBkX2NsZWFuXzQgJT4lCiAgICAgIG11dGF0ZSh0YXJnZXQgPSBjaGFyYWN0ZXJMKSAlPiUKICAgICAgZHBseXI6OnNlbGVjdChzdHVkeSwgc3ViaWQsIHRhcmdldCwgaGFwcHlfY2hhcmFjdGVyTDpDQVRDSF9jaGFyYWN0ZXJMKQogICAgbmFtZXMoZF9jbGVhbl81X2NoYXJhY3RlckwpIDwtIGdzdWIoIl9jaGFyYWN0ZXJMIiwgIiIsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZXMoZF9jbGVhbl81X2NoYXJhY3RlckwpKQogICAgCiAgICBkX2NsZWFuXzVfY2hhcmFjdGVyUiA8LSBkX2NsZWFuXzQgJT4lCiAgICAgIG11dGF0ZSh0YXJnZXQgPSBjaGFyYWN0ZXJSKSAlPiUKICAgICAgZHBseXI6OnNlbGVjdChzdHVkeSwgc3ViaWQsIHRhcmdldCwgaGFwcHlfY2hhcmFjdGVyUjpDQVRDSF9jaGFyYWN0ZXJSKQogICAgbmFtZXMoZF9jbGVhbl81X2NoYXJhY3RlclIpIDwtIGdzdWIoIl9jaGFyYWN0ZXJSIiwgIiIsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZXMoZF9jbGVhbl81X2NoYXJhY3RlclIpKQogICAgCiAgICBkX2NsZWFuIDwtIGRfY2xlYW5fNV9jaGFyYWN0ZXJMICU+JQogICAgICBmdWxsX2pvaW4oZF9jbGVhbl81X2NoYXJhY3RlclIpICU+JQogICAgICBmdWxsX2pvaW4oZF9jbGVhbl81X2RlbW8pICU+JQogICAgICBkcGx5cjo6c2VsZWN0KHN0dWR5LCBzdWJpZCwgZGF0ZTpyZWxpZ2lvbl9jYXQsIHRhcmdldDpDQVRDSCkKICAgIAogICAgIyByZW1vdmUgZXh0cmFuZW91cyBkZnMgYW5kIHZhcmlhYmxlcwogICAgcm0oZCwgZF9jbGVhbl8xLCBkX2NsZWFuXzIsIGRfY2xlYW5fMywgZF9jbGVhbl80LCBkX2NsZWFuXzVfY2hhcmFjdGVyTCwgCiAgICAgICBkX2NsZWFuXzVfY2hhcmFjdGVyUiwgZF9jbGVhbl81X2RlbW8sIGkpCiAgfQogIAogIGlmKGRhdGFzb3VyY2UgPT0gInN0dWR5IDQiKSB7CiAgICAKICAgICMgc2V0IHRhcmdldCBkYXRhc2V0CiAgICBkIDwtIGRfcmF3X3N0dWR5NAoKICAgICAgICAjIGVuYWN0IGV4Y2x1c2lvbmFyeSBjcml0ZXJpYQogICAgZF9jbGVhbl8xIDwtIGQgJT4lCiAgICAgIG11dGF0ZShmaW5pc2hlZF9tb2QgPSBpZmVsc2UoaXMubmEoQ0FUQ0gpLCAwLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmZWxzZShmaW5pc2hlZCA9PSAxLCAxLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLjUpKSkgJT4lCiAgICAgIGZpbHRlcihDQVRDSCA9PSAxLCAjIGV4Y2x1ZGUgUHMgd2hvIGZhaWwgY2F0Y2ggdHJpYWxzIAogICAgICAgICAgICAgZmluaXNoZWRfbW9kICE9IDApICU+JSAjIGV4Y2x1ZGUgUHMgd2hvIGRpZCBub3QgY29tcGxldGUgdGFzawogICAgICBtdXRhdGUoeW9iX2NvcnJlY3QgPSBhcy5udW1lcmljKAogICAgICAgIGlmZWxzZShhcy5udW1lcmljKGFzLmNoYXJhY3Rlcih5b2IpKSA+IDE5MDAgJiAKICAgICAgICAgICAgICAgICBhcy5udW1lcmljKGFzLmNoYXJhY3Rlcih5b2IpKSA8IDIwMDAsIAogICAgICAgICAgICAgICBhcy5udW1lcmljKGFzLmNoYXJhY3Rlcih5b2IpKSwgTkEpKSwgIyBjb3JyZWN0IGZvcm1hdHRpbmcgaW4geW9iCiAgICAgICAgYWdlX2FwcHJveCA9IDIwMTYgLSB5b2JfY29ycmVjdCkgJT4lICMgY2FsY3VsYXRlIGFwcHJveGltYXRlIGFnZQogICAgICBtdXRhdGUoZ2VuZGVyID0gZmFjdG9yKGdlbmRlciwgbGV2ZWxzID0gYygxLCAyLCAwKSwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWxzID0gYygibSIsICJmIiwgIm90aGVyIikpKSAlPiUKICAgICAgZmlsdGVyKGFnZV9hcHByb3ggPj0gMTgpICMgZXhjbHVkZSBQcyB3aG8gYXJlIHlvdW5nZXIgdGhhbiAxOCB5ZWFycwogICAgCiAgICAjIHJlY29kZSBvbmUgY2hhcmFjdGVyCiAgICBkX2NsZWFuXzIgPC0gZF9jbGVhbl8xICU+JQogICAgICBtdXRhdGUoY29uZGl0aW9uID0gZmFjdG9yKGlmZWxzZSgKICAgICAgICBncmVwbCgidmVnZXRhdGl2ZSIsIGFzLmNoYXJhY3Rlcihjb25kaXRpb24pKSwgInB2cyIsCiAgICAgICAgaWZlbHNlKGdyZXBsKCJibHVlIiwgYXMuY2hhcmFjdGVyKGNvbmRpdGlvbikpLCAiYmx1ZWpheSIsCiAgICAgICAgICAgICAgIGlmZWxzZShncmVwbCgiY2hpbXAiLCBhcy5jaGFyYWN0ZXIoY29uZGl0aW9uKSksICJjaGltcCIsCiAgICAgICAgICAgICAgICAgICAgICBhcy5jaGFyYWN0ZXIoY29uZGl0aW9uKSkpKSkpCgogICAgIyByZWNvZGUgYmFja2dyb3VuZCBhbmQgZGVtb2dyYXBoaWMgdmFyaWFibGVzCiAgICBkX2NsZWFuIDwtIGRfY2xlYW5fMiAlPiUKICAgICAgbXV0YXRlKCAjIGRlYWwgd2l0aCBzdHVkeSBudW1iZXIKICAgICAgICBzdHVkeSA9IGZhY3RvcihzdHVkeSkpICU+JQogICAgICBtdXRhdGUoICMgZGVhbCB3aXRoIHN0dWR5IGR1cmF0aW9uCiAgICAgICAgZHVyYXRpb24gPSBhcy5udW1lcmljKGRpZmZ0aW1lKHN0cnB0aW1lKGVuZF90aW1lLCAiJUk6JU06JVMiKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RycHRpbWUoc3RhcnRfdGltZSwgIiVJOiVNOiVTIiksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuaXRzID0gIm1pbnMiKSkpICU+JQogICAgICBtdXRhdGUoICMgZGVhbCB3aXRoIHJhY2UKICAgICAgICByYWNlX2FzaWFuX2Vhc3QgPSAKICAgICAgICAgIGZhY3RvcihpZmVsc2UoaXMubmEocmFjZV9hc2lhbl9lYXN0KSwgIiIsICJhc2lhbl9lYXN0ICIpKSwKICAgICAgICByYWNlX2FzaWFuX3NvdXRoID0gCiAgICAgICAgICBmYWN0b3IoaWZlbHNlKGlzLm5hKHJhY2VfYXNpYW5fc291dGgpLCAiIiwgImFzaWFuX3NvdXRoICIpKSwKICAgICAgICByYWNlX2FzaWFuX290aGVyID0gCiAgICAgICAgICBmYWN0b3IoaWZlbHNlKGlzLm5hKHJhY2VfYXNpYW5fb3RoZXIpLCAiIiwgImFzaWFuX290aGVyICIpKSwKICAgICAgICByYWNlX2JsYWNrID0gCiAgICAgICAgICBmYWN0b3IoaWZlbHNlKGlzLm5hKHJhY2VfYmxhY2spLCAiIiwgImJsYWNrICIpKSwKICAgICAgICByYWNlX2hpc3BhbmljID0gCiAgICAgICAgICBmYWN0b3IoaWZlbHNlKGlzLm5hKHJhY2VfaGlzcGFuaWMpLCAiIiwgImhpc3BhbmljICIpKSwKICAgICAgICByYWNlX21pZGRsZV9lYXN0ZXJuID0gCiAgICAgICAgICBmYWN0b3IoaWZlbHNlKGlzLm5hKHJhY2VfbWlkZGxlX2Vhc3Rlcm4pLCAiIiwgIm1pZGRsZV9lYXN0ZXJuICIpKSwKICAgICAgICByYWNlX25hdGl2ZV9hbWVyaWNhbiA9IAogICAgICAgICAgZmFjdG9yKGlmZWxzZShpcy5uYShyYWNlX25hdGl2ZV9hbWVyaWNhbiksICIiLCAibmF0aXZlX2FtZXJpY2FuICIpKSwKICAgICAgICByYWNlX3BhY19pc2xhbmRlciA9IAogICAgICAgICAgZmFjdG9yKGlmZWxzZShpcy5uYShyYWNlX3BhY19pc2xhbmRlciksICIiLCAicGFjX2lzbGFuZGVyICIpKSwKICAgICAgICByYWNlX3doaXRlID0gCiAgICAgICAgICBmYWN0b3IoaWZlbHNlKGlzLm5hKHJhY2Vfd2hpdGUpLCAiIiwgIndoaXRlICIpKSwKICAgICAgICByYWNlX290aGVyX3ByZWZubyA9IAogICAgICAgICAgZmFjdG9yKGlmZWxzZShpcy5uYShyYWNlX290aGVyX3ByZWZubyksICIiLCAib3RoZXJfcHJlZm5vICIpKSwKICAgICAgICByYWNlX2NhdCA9IHBhc3RlMChyYWNlX2FzaWFuX2Vhc3QsIHJhY2VfYXNpYW5fc291dGgsIHJhY2VfYXNpYW5fb3RoZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgcmFjZV9ibGFjaywgcmFjZV9oaXNwYW5pYywgcmFjZV9taWRkbGVfZWFzdGVybiwKICAgICAgICAgICAgICAgICAgICAgICAgICByYWNlX25hdGl2ZV9hbWVyaWNhbiwgcmFjZV9wYWNfaXNsYW5kZXIsIHJhY2Vfd2hpdGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgcmFjZV9vdGhlcl9wcmVmbm8pLAogICAgICAgIHJhY2VfY2F0MiA9IGZhY3RvcihzdWIoIiArJCIsICIiLCByYWNlX2NhdCkpLAogICAgICAgIHJhY2VfY2F0MyA9IGZhY3RvcihpZmVsc2UoZ3JlcGwoIiAiLCByYWNlX2NhdDIpID09IFQsICJtdWx0aXJhY2lhbCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcy5jaGFyYWN0ZXIocmFjZV9jYXQyKSkpKSAlPiUKICAgICAgZHBseXI6OnNlbGVjdChzdHVkeSwgc3ViaWQ6ZW5kX3RpbWUsIGR1cmF0aW9uLCBmaW5pc2hlZDpnZW5kZXIsIAogICAgICAgICAgICAgZWR1Y2F0aW9uOmFnZV9hcHByb3gsIHJhY2VfY2F0MykgJT4lCiAgICAgIHJlbmFtZShyYWNlX2NhdCA9IHJhY2VfY2F0MykKICAgIAogICAgIyBmaWx0ZXIgY29uZGl0aW9ucyBpZiBkZXNpcmVkCiAgICBpZihpcy5lbGVtZW50KCJub25lIiwgY2hvc2VuRXhjbHVkZSkpIHt9IGVsc2UgewogICAgICBkX2NsZWFuIDwtIGRfY2xlYW4gJT4lCiAgICAgICAgZmlsdGVyKCFjb25kaXRpb24gJWluJSBjaG9zZW5FeGNsdWRlKQogICAgfQogICAgCiAgICAjIHJlbW92ZSBleHRyYW5lb3VzIGRmcyBhbmQgdmFyaWFibGVzCiAgICBybShkLCBkX2NsZWFuXzEsIGRfY2xlYW5fMikKICB9CiAgCiMgICAjIHRyYW5zZm9ybSB0byAwIHRvIDYgc2NhbGUKIyAgIGRfY2xlYW4gPC0gZF9jbGVhbiAlPiUKIyAgICAgZ2F0aGVyKG1jLCBzY29yZSwgaGFwcHk6cHJpZGUpICU+JQojICAgICBtdXRhdGUoc2NvcmUgPSBzY29yZSArIDMpICU+JSAjIHRyYW5zZm9ybSBmcm9tIC0zIHRvIDMgLS0+IDAgdG8gNgojICAgICBzcHJlYWQobWMsIHNjb3JlKQogIAogICMgcmVtb3ZlIG91dGxpZXJzCiAgaWYoY2hvc2VuT3V0bGllckhhbmRsaW5nID09ICJyZW1vdmUiKSB7CiAgICAKICAgIGlmKGRhdGFzb3VyY2UgJWluJSBjKCJzdHVkeSAxIiwgInN0dWR5IDIiLCAic3R1ZHkgNCIpKSB7CiAgICAgICAgZF9jbGVhbiA8LSBkX2NsZWFuICU+JQogICAgICAgIGdhdGhlcihtYywgc2NvcmUsIGhhcHB5OnByaWRlKSAlPiUKICAgICAgICBncm91cF9ieShjb25kaXRpb24sIG1jKSAlPiUKICAgICAgICBmaWx0ZXIoIXNjb3JlICVpbiUgYm94cGxvdC5zdGF0cyhzY29yZSwgMi41KSRvdXQpICU+JQogICAgICAgIHNwcmVhZChtYywgc2NvcmUpICU+JQogICAgICAgIGFycmFuZ2UoY29uZGl0aW9uLCBzdWJpZCkKICAgIH0KICAgIAogICAgaWYoZGF0YXNvdXJjZSA9PSAic3R1ZHkgMyIpIHsKICAgICAgZF9jbGVhbiA8LSBkX2NsZWFuICU+JQogICAgICAgIGdhdGhlcihtYywgc2NvcmUsIGhhcHB5OnByaWRlKSAlPiUKICAgICAgICBncm91cF9ieSh0YXJnZXQsIG1jKSAlPiUKICAgICAgICBmaWx0ZXIoIXNjb3JlICVpbiUgYm94cGxvdC5zdGF0cyhzY29yZSwgMi41KSRvdXQpICU+JQogICAgICAgIHNwcmVhZChtYywgc2NvcmUpICU+JQogICAgICAgIGFycmFuZ2UodGFyZ2V0LCBzdWJpZCkKICAgIH0KICAgIAogIH0KICAKICAjIGZpbHRlciBpdGVtcyBpZiBkZXNpcmVkCiAgaWYoaXMuZWxlbWVudCgibm9uZSIsIGNob3NlbkV4Y2x1ZGVJdGVtKSkge30gZWxzZSB7CiAgICBkX2NsZWFuIDwtIGRfY2xlYW4gJT4lCiAgICAgIGRwbHlyOjpzZWxlY3QoLWNvbnRhaW5zKGNob3NlbkV4Y2x1ZGVJdGVtKSkKICB9CgogICMgcmV0dXJuIGNsZWFuZWQgZGF0YXNldAogIHJldHVybihkX2NsZWFuKQp9CgojIG1ha2UgZnVuY3Rpb24gZm9yIGV4YW1pbmluZyBleGNsdXNpb24gb2YgcGFydGljaXBhbnRzCmV4Y2x1ZGVkQ291bnRzIDwtIGZ1bmN0aW9uKGRhdGFzb3VyY2UpIHsKICAKICAjIHNldCBkYXRhc291cmNlCiAgaWYoZGF0YXNvdXJjZSA9PSAic3R1ZHkgMSIpewogICAgZCA8LSBkMQogICAgZF9yYXcgPC0gZF9yYXdfc3R1ZHkxCiAgfQogIGlmKGRhdGFzb3VyY2UgPT0gInN0dWR5IDIiKXsKICAgIGQgPC0gZDIKICAgIGRfcmF3IDwtIGRfcmF3X3N0dWR5MgogIH0KICBpZihkYXRhc291cmNlID09ICJzdHVkeSAzIil7CiAgICBkIDwtIGQzCiAgICBkX3JhdyA8LSBkX3Jhd19zdHVkeTMKICB9CiAgaWYoZGF0YXNvdXJjZSA9PSAic3R1ZHkgNCIpewogICAgZCA8LSBkNAogICAgZF9yYXcgPC0gZF9yYXdfc3R1ZHk0CiAgfQogIAogICMgZ2V0IHN1YmlkcyBvZiBzdWNjZXNzZnVsIHBhcnRpY2lwYW50cwogIGRfc3ViaWRzIDwtIGxldmVscyhmYWN0b3IoYXMuY2hhcmFjdGVyKGQkc3ViaWQpKSkKICAKICAjIGdldCBzdWJpZHMgb2YgZXhjbHVkZWQgcGFydGljaXBhbnRzCiAgZF9leGNsdWRlZCA8LSBkX3JhdyAlPiUKICAgIGZpbHRlcihpcy5lbGVtZW50KHN1YmlkLCBkX3N1YmlkcykgPT0gRkFMU0UpICU+JQogICAgZHBseXI6OnNlbGVjdChjb25kaXRpb24sIHN1YmlkLCBmaW5pc2hlZCwgc3RhcnRzX3dpdGgoIkNBVENIIiksIHlvYikKCiAgIyBjb3VudCBleGNsdWRlZCBwYXJ0aWNpcGFudHMKICBkX2V4Y2x1ZGVkX24gPC0gbGVuZ3RoKGRfZXhjbHVkZWQkc3ViaWQpCiAgCiAgaWYoZGF0YXNvdXJjZSAlaW4lIGMoInN0dWR5IDEiLCAic3R1ZHkgMiIsICJzdHVkeSA0IikpIHsKICAgICMgY291bnQgcGFydGljaXBhbnRzIHdobyBkaWQgbm90IGZpbmlzaAogICAgZF9leGNsdWRlZF91bmZpbmlzaGVkIDwtIGRfZXhjbHVkZWQgJT4lCiAgICAgIGZpbHRlcihpcy5uYShDQVRDSCkgPT0gVCwKICAgICAgICAgICAgIGZpbmlzaGVkICE9IDEpICU+JQogICAgICBkcGx5cjo6c2VsZWN0KHN1YmlkKSAlPiUKICAgICAgYygpCiAgICAKICAgICMgY291bnQgcGFydGljaXBhbnRzIHdobyBmaW5pc2hlZCwgYnV0IGZhaWxlZCBjYXRjaCB0cmlhbAogICAgZF9leGNsdWRlZF9DQVRDSCA8LSBkX2V4Y2x1ZGVkICU+JQogICAgICBmaWx0ZXIoaXMuZWxlbWVudChzdWJpZCwgZF9leGNsdWRlZF91bmZpbmlzaGVkJHN1YmlkKSA9PSBGQUxTRSkgJT4lCiAgICAgIGZpbHRlcihDQVRDSCAhPSAxKSAlPiUKICAgICAgZHBseXI6OnNlbGVjdChzdWJpZCkgJT4lCiAgICAgIGMoKQogIH0KICAKICBpZihkYXRhc291cmNlID09ICJzdHVkeSAzIikgewogICAgIyBjb3VudCBwYXJ0aWNpcGFudHMgd2hvIGRpZCBub3QgZmluaXNoCiAgICBkX2V4Y2x1ZGVkX3VuZmluaXNoZWQgPC0gZF9leGNsdWRlZCAlPiUKICAgICAgZmlsdGVyKGlzLm5hKENBVENILi5jaGFyYWN0ZXJMKSA9PSBULAogICAgICAgICAgICAgaXMubmEoQ0FUQ0guLmNoYXJhY3RlclIpID09IFQsCiAgICAgICAgICAgICBmaW5pc2hlZCAhPSAxKSAlPiUKICAgICAgZHBseXI6OnNlbGVjdChzdWJpZCkgJT4lCiAgICAgIGMoKQogICAgCiAgICAjIGNvdW50IHBhcnRpY2lwYW50cyB3aG8gZmluaXNoZWQsIGJ1dCBmYWlsZWQgY2F0Y2ggdHJpYWwKICAgIGRfZXhjbHVkZWRfQ0FUQ0ggPC0gZF9leGNsdWRlZCAlPiUKICAgICAgZmlsdGVyKGlzLmVsZW1lbnQoc3ViaWQsIGRfZXhjbHVkZWRfdW5maW5pc2hlZCRzdWJpZCkgPT0gRkFMU0UpICU+JQogICAgICBmaWx0ZXIoQ0FUQ0guLmNoYXJhY3RlckwgIT0gNSB8IENBVENILi5jaGFyYWN0ZXJSICE9IDUpICU+JQogICAgICBkcGx5cjo6c2VsZWN0KHN1YmlkKSAlPiUKICAgICAgYygpCiAgfQogIAogICMgY291bnQgcGFydGljaXBhbnRzIHdobyBmaW5pc2hlZCBhbmQgcGFzc2VkIGNhdGNoIHRyaWFsLCAKICAjIGJ1dCBkaWQgbm90IHByb3ZpZGUgeWVhciBvZiBiaXJ0aAogIGRfZXhjbHVkZWRfbm9feW9iIDwtIGRfZXhjbHVkZWQgJT4lCiAgICBmaWx0ZXIoaXMuZWxlbWVudChzdWJpZCwgZF9leGNsdWRlZF91bmZpbmlzaGVkJHN1YmlkKSA9PSBGQUxTRSwKICAgICAgICAgICBpcy5lbGVtZW50KHN1YmlkLCBkX2V4Y2x1ZGVkX0NBVENIJHN1YmlkKSA9PSBGQUxTRSkgJT4lCiAgICBtdXRhdGUoeW9iID0gYXMubnVtZXJpYyhhcy5jaGFyYWN0ZXIoeW9iKSkpICU+JQogICAgZmlsdGVyKGlzLm5hKHlvYikgfCB5b2IgPCAxODk5IHwgbmNoYXIoYXMuY2hhcmFjdGVyKHlvYikpICE9IDQpICU+JQogICAgZHBseXI6OnNlbGVjdChzdWJpZCkgJT4lCiAgICBjKCkKICAKICAjIGNvdW50IHBhcnRpY2lwYW50cyB3aG8gZmluaXNoZWQgYW5kIHBhc3NlZCBjYXRjaCB0cmlhbCwgCiAgIyBidXQgZGlkIG5vdCBwcm92aWRlIHllYXIgb2YgYmlydGgKICBkX2V4Y2x1ZGVkX3lvdW5nIDwtIGRfZXhjbHVkZWQgJT4lCiAgICBmaWx0ZXIoaXMuZWxlbWVudChzdWJpZCwgZF9leGNsdWRlZF91bmZpbmlzaGVkJHN1YmlkKSA9PSBGQUxTRSwKICAgICAgICAgICBpcy5lbGVtZW50KHN1YmlkLCBkX2V4Y2x1ZGVkX0NBVENIJHN1YmlkKSA9PSBGQUxTRSwKICAgICAgICAgICBpcy5lbGVtZW50KHN1YmlkLCBkX2V4Y2x1ZGVkX25vX3lvYiRzdWJpZCkgPT0gRkFMU0UpICU+JQogICAgbXV0YXRlKHlvYiA9IGFzLm51bWVyaWMoYXMuY2hhcmFjdGVyKHlvYikpKSAlPiUKICAgIGZpbHRlcihpcy5uYSh5b2IpIHwgMjAxNiAtIHlvYiA8IDE4KSAlPiUKICAgIGRwbHlyOjpzZWxlY3Qoc3ViaWQpICU+JQogICAgYygpCiAgCiAgIyBzdW0gdXAgZXhjbHVkZWQgcGFydGljaXBhbnRzIGJ5IGNhdGVnb3J5CiAgdG90YWwgPC0gc3VtKGxlbmd0aChkX2V4Y2x1ZGVkX3VuZmluaXNoZWQkc3ViaWQpLAogICAgICAgICAgICAgICBsZW5ndGgoZF9leGNsdWRlZF9DQVRDSCRzdWJpZCksCiAgICAgICAgICAgICAgIGxlbmd0aChkX2V4Y2x1ZGVkX25vX3lvYiRzdWJpZCksCiAgICAgICAgICAgICAgIGxlbmd0aChkX2V4Y2x1ZGVkX3lvdW5nJHN1YmlkKSkKICAKICAjIGNhbGN1bGF0ZSBjb3VudHMKICBleGNsdWRlZF9jb3VudHMgPC0gCiAgICBkYXRhLmZyYW1lKCJkaWRfbm90X2ZpbmlzaCIgPSBsZW5ndGgoZF9leGNsdWRlZF91bmZpbmlzaGVkJHN1YmlkKSwKICAgICAgICAgICAgICAgImZhaWxlZF9jYXRjaF90cmlhbCIgPSBsZW5ndGgoZF9leGNsdWRlZF9DQVRDSCRzdWJpZCksCiAgICAgICAgICAgICAgICJkaWRfbm90X3Byb3ZpZGVfeW9iIiA9IGxlbmd0aChkX2V4Y2x1ZGVkX25vX3lvYiRzdWJpZCksCiAgICAgICAgICAgICAgICJ0b29feW91bmciID0gbGVuZ3RoKGRfZXhjbHVkZWRfeW91bmckc3ViaWQpLAogICAgICAgICAgICAgICAiVE9UQUxfZXhjbHVkZWQiID0gdG90YWwsCiAgICAgICAgICAgICAgICJUT1RBTF9wYXJ0aWNpcGF0ZWQiID0gbGVuZ3RoKGQkc3ViaWQpLAogICAgICAgICAgICAgICAiT1ZFUkFMTF9UT1RBTCIgPSBzdW0odG90YWwsIGxlbmd0aChkJHN1YmlkKSkpCiAgCiAgaWYodG90YWwgIT0gZF9leGNsdWRlZF9uKSB7CiAgICBzdG9wKCJFcnJvcjogNCBzb3VyY2VzIG9mIGV4Y2x1c2lvbiBkbyBub3QgYWRkIHVwIHRvIHRvdGFsLiIpCiAgICB9IGVsc2UgewogICAgICByZXR1cm4oZXhjbHVkZWRfY291bnRzKQogICAgfQp9CgojIG1ha2UgZnVuY3Rpb24gZm9yIHN0cmlwcGluZyBkYXRhZnJhbWVzIGZvciBkaW1lbnNpb24gcmVkdWNhdGlvbgptYWtlRFJERiA8LSBmdW5jdGlvbihkYXRhc291cmNlLCBjaG9zZW5Db25kaXRpb24pIHsKICAKICAjIHNldCB0YXJnZXQgZGF0YXNldAogIGlmKGRhdGFzb3VyY2UgPT0gInN0dWR5IDEiKXtkIDwtIGQxfQogIGlmKGRhdGFzb3VyY2UgPT0gInN0dWR5IDIiKXtkIDwtIGQyfQogIGlmKGRhdGFzb3VyY2UgPT0gInN0dWR5IDMiKXsKICAgICMgcmVuYW1lIHZhcmlhYmxlcyBmb3IgZWFzZSBvZiBmdW5jdGlvbiBhcHBscGljYXRpb24KICAgIGQgPC0gZDMgJT4lCiAgICAgIHJlbmFtZShvcmRlciA9IGNvbmRpdGlvbiwKICAgICAgICAgICAgIGNvbmRpdGlvbiA9IHRhcmdldCkKICAgIAogICAgIyByZW5hbWUgc3ViaWRzIGJ5IGNvbmRpdGlvbiBpZiBjb2xsYXBzZXMgYWNyb3NzIGNvbmRpdGlvbnMKICAgIGQgPC0gZCAlPiUKICAgICAgbXV0YXRlKHN1YmlkID0gcGFzdGUoY29uZGl0aW9uLCBzdWJpZCwgc2VwID0gIl8iKSkKICB9CiAgaWYoZGF0YXNvdXJjZSA9PSAic3R1ZHkgNCIpe2QgPC0gZDR9CiAgCiAgIyBmaWx0ZXIgYnkgY29uZGl0aW9uIGlmIHNwZWNpZmllZAogIGlmKGNob3NlbkNvbmRpdGlvbiAlaW4lIGMoImJlZXRsZSIsICJyb2JvdCIpKSB7CiAgICBkIDwtIGQgJT4lIGZpbHRlcihjb25kaXRpb24gPT0gY2hvc2VuQ29uZGl0aW9uKQogIH0KICAKICAjIG1ha2Ugc3RyaXBwZWQgZGF0YWZyYW1lIGZvciBkaW1lbnNpb24gcmVkdWNhdGlvbiBhbmFseXNlcwogIGRfc3RyaXAgPC0gZCAlPiUKICAgIGRwbHlyOjpzZWxlY3Qoc3ViaWQsIGhhcHB5OnByaWRlKQogIGRfc3RyaXAgPC0gZGF0YS5mcmFtZShkX3N0cmlwWywtMV0sIHJvdy5uYW1lcyA9IGRfc3RyaXAkc3ViaWQpCiAgCiAgIyByZXR1cm4gc3RyaXBwZWQgZGF0YWZyYW1lCiAgcmV0dXJuKGRfc3RyaXApCn0KCiMgbWFrZSBkZW1vZ3JhcGhpY3MgZnVuY3Rpb25zCmRlbW9TYW1wbGVTaXplIDwtIGZ1bmN0aW9uKGRhdGFzb3VyY2UpIHsKCiAgIyBzZXQgdGFyZ2V0IGRhdGFzZXQKICBpZihkYXRhc291cmNlID09ICJzdHVkeSAxIil7ZCA8LSBkMX0KICBpZihkYXRhc291cmNlID09ICJzdHVkeSAyIil7ZCA8LSBkMn0KICBpZihkYXRhc291cmNlID09ICJzdHVkeSAzIil7CiAgICAjIHJlbmFtZSB2YXJpYWJsZXMgZm9yIGVhc2Ugb2YgZnVuY3Rpb24gYXBwbHBpY2F0aW9uCiAgICBkIDwtIGQzICU+JQogICAgICByZW5hbWUob3JkZXIgPSBjb25kaXRpb24sCiAgICAgICAgICAgICBjb25kaXRpb24gPSB0YXJnZXQpCiAgfQogIGlmKGRhdGFzb3VyY2UgPT0gInN0dWR5IDQiKXtkIDwtIGQ0fQoKICAjIGdldCBzYW1wbGUgc2l6ZSBwZXIgY29uZGl0aW9uCiAgc2FtcGxlX3NpemUgPC0gdmVjdG9yKCkKICBmb3IoaSBpbiBsZXZlbHMoZCRjb25kaXRpb24pKSB7CiAgICBzYW1wbGVfc2l6ZVthcy5jaGFyYWN0ZXIoaSldIDwtIAogICAgICBhcy5udW1lcmljKGQgJT4lIGZpbHRlcihjb25kaXRpb24gPT0gaSkgJT4lIGRwbHlyOjpzZWxlY3Qoc3ViaWQpICU+JSAKICAgICAgICAgICAgICAgICAgIHVuaXF1ZSgpICU+JSBjb3VudCgpKQogIH0KCiAgIyBhZGQgdG90YWwgc2FtcGxlIHNpemUgIAogIHNhbXBsZV9zaXplWyJhbGwiXSA8LSBhcy5udW1lcmljKGQgJT4lIGRwbHlyOjpzZWxlY3Qoc3ViaWQpICU+JSAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuaXF1ZSgpICU+JSBjb3VudCgpKQogIAogICMgbWFrZSBpbnRvIGRhdGFmcmFtZSBmb3IgdXNpbmcga2FibGUKICBzYW1wbGVfc2l6ZSA8LSBkYXRhLmZyYW1lKHNhbXBsZV9zaXplKSAlPiUKICAgIHJvd25hbWVzX3RvX2NvbHVtbigpICU+JQogICAgcmVuYW1lKGNvbmRpdGlvbiA9IHJvd25hbWUsCiAgICAgICAgICAgbiA9IHNhbXBsZV9zaXplKQogIAogICMgcmV0dXJuIGRhdGFmcmFtZSBmb3IgdXNpbmcga2FibGUKICByZXR1cm4oc2FtcGxlX3NpemUpCn0KZGVtb0R1cmF0aW9uIDwtIGZ1bmN0aW9uKGRhdGFzb3VyY2UpIHsKCiAgIyBzZXQgdGFyZ2V0IGRhdGFzZXQKICBpZihkYXRhc291cmNlID09ICJzdHVkeSAxIil7ZCA8LSBkMX0KICBpZihkYXRhc291cmNlID09ICJzdHVkeSAyIil7ZCA8LSBkMn0KICBpZihkYXRhc291cmNlID09ICJzdHVkeSAzIil7CiAgICAjIHJlY29kZSB2YXJpYWJsZXMgZm9yIGVhc2Ugb2YgZnVuY3Rpb24gYXBwbHBpY2F0aW9uCiAgICBkIDwtIGQzICU+JQogICAgICBtdXRhdGUoY29uZGl0aW9uID0gIndpdGhpbi1zdWJqZWN0cyIpCiAgfQogIGlmKGRhdGFzb3VyY2UgPT0gInN0dWR5IDQiKXtkIDwtIGQ0fQoKICAjIGdldCBzYW1wbGUgc2l6ZSBwZXIgY29uZGl0aW9uCiAgZHVyYXRpb24gPC0gZCAlPiUKICAgIGdyb3VwX2J5KGNvbmRpdGlvbikgJT4lCiAgICBzdW1tYXJpc2UobWluX2R1cmF0aW9uID0gbWluKGR1cmF0aW9uKSwKICAgICAgICAgICAgICBtYXhfZHVyYXRpb24gPSBtYXgoZHVyYXRpb24pLAogICAgICAgICAgICAgIG1lZGlhbl9kdXJhdGlvbiA9IG1lZGlhbihkdXJhdGlvbiksCiAgICAgICAgICAgICAgbWVhbl9kdXJhdGlvbiA9IG1lYW4oZHVyYXRpb24pLAogICAgICAgICAgICAgIHNkX2R1cmF0aW9uID0gc2QoZHVyYXRpb24pKQoKICAjIGFkZCB0b3RhbCBkdXJhdGlvbgogIGlmKGRhdGFzb3VyY2UgJWluJSBjKCJzdHVkeSAxIiwgInN0dWR5IDIiLCAic3R1ZHkgNCIpKSB7CiAgICBhbGwgPC0gZCAlPiUKICAgICAgc3VtbWFyaXNlKG1pbl9kdXJhdGlvbiA9IG1pbihkdXJhdGlvbiksCiAgICAgICAgICAgICAgICBtYXhfZHVyYXRpb24gPSBtYXgoZHVyYXRpb24pLAogICAgICAgICAgICAgICAgbWVkaWFuX2R1cmF0aW9uID0gbWVkaWFuKGR1cmF0aW9uKSwKICAgICAgICAgICAgICAgIG1lYW5fZHVyYXRpb24gPSBtZWFuKGR1cmF0aW9uKSwKICAgICAgICAgICAgICAgIHNkX2R1cmF0aW9uID0gc2QoZHVyYXRpb24pKSAlPiUKICAgICAgbXV0YXRlKGNvbmRpdGlvbiA9ICJhbGwiKQogICAgZHVyYXRpb24gPC0gcmJpbmQoZHVyYXRpb24sIGFsbCkgIyBub3Qgc3VyZSB3aHkgZnVsbF9qb2luIGRvZXNuJ3Qgd29yayAgICAKICB9CgogICMgcmV0dXJuIGRhdGFmcmFtZSBmb3IgdXNpbmcga2FibGUKICByZXR1cm4oZHVyYXRpb24pCn0KZGVtb0FnZSA8LSBmdW5jdGlvbihkYXRhc291cmNlKSB7CgogICMgc2V0IHRhcmdldCBkYXRhc2V0CiAgaWYoZGF0YXNvdXJjZSA9PSAic3R1ZHkgMSIpe2QgPC0gZDF9CiAgaWYoZGF0YXNvdXJjZSA9PSAic3R1ZHkgMiIpe2QgPC0gZDJ9CiAgaWYoZGF0YXNvdXJjZSA9PSAic3R1ZHkgMyIpewogICAgIyByZWNvZGUgdmFyaWFibGVzIGZvciBlYXNlIG9mIGZ1bmN0aW9uIGFwcGxwaWNhdGlvbgogICAgZCA8LSBkMyAlPiUKICAgICAgbXV0YXRlKGNvbmRpdGlvbiA9ICJ3aXRoaW4tc3ViamVjdHMiKQogIH0KICBpZihkYXRhc291cmNlID09ICJzdHVkeSA0Iil7ZCA8LSBkNH0KCiAgIyBnZXQgc2FtcGxlIHNpemUgcGVyIGNvbmRpdGlvbgogIGFnZSA8LSBkICU+JQogICAgZ3JvdXBfYnkoY29uZGl0aW9uKSAlPiUKICAgIHN1bW1hcmlzZShtaW5fYWdlID0gbWluKGFnZV9hcHByb3gpLAogICAgICAgICAgICAgIG1heF9hZ2UgPSBtYXgoYWdlX2FwcHJveCksCiAgICAgICAgICAgICAgbWVkaWFuX2FnZSA9IG1lZGlhbihhZ2VfYXBwcm94KSwKICAgICAgICAgICAgICBtZWFuX2FnZSA9IG1lYW4oYWdlX2FwcHJveCksCiAgICAgICAgICAgICAgc2RfYWdlID0gc2QoYWdlX2FwcHJveCkpCgogICMgYWRkIHRvdGFsIGFnZQogIGlmKGRhdGFzb3VyY2UgJWluJSBjKCJzdHVkeSAxIiwgInN0dWR5IDIiLCAic3R1ZHkgNCIpKSB7CiAgICBhbGwgPC0gZCAlPiUKICAgICAgc3VtbWFyaXNlKG1pbl9hZ2UgPSBtaW4oYWdlX2FwcHJveCksCiAgICAgICAgICAgICAgICBtYXhfYWdlID0gbWF4KGFnZV9hcHByb3gpLAogICAgICAgICAgICAgICAgbWVkaWFuX2FnZSA9IG1lZGlhbihhZ2VfYXBwcm94KSwKICAgICAgICAgICAgICAgIG1lYW5fYWdlID0gbWVhbihhZ2VfYXBwcm94KSwKICAgICAgICAgICAgICAgIHNkX2FnZSA9IHNkKGFnZV9hcHByb3gpKSAlPiUKICAgICAgbXV0YXRlKGNvbmRpdGlvbiA9ICJhbGwiKQogICAgYWdlIDwtIGZ1bGxfam9pbihhZ2UsIGFsbCkKICB9CgogICMgcmV0dXJuIGRhdGFmcmFtZSBmb3IgdXNpbmcga2FibGUKICByZXR1cm4oYWdlKQp9CmRlbW9HZW5kZXIgPC0gZnVuY3Rpb24oZGF0YXNvdXJjZSkgewoKICAjIHNldCB0YXJnZXQgZGF0YXNldAogIGlmKGRhdGFzb3VyY2UgPT0gInN0dWR5IDEiKXtkIDwtIGQxfQogIGlmKGRhdGFzb3VyY2UgPT0gInN0dWR5IDIiKXtkIDwtIGQyfQogIGlmKGRhdGFzb3VyY2UgPT0gInN0dWR5IDMiKXtkIDwtIGQzfQogIGlmKGRhdGFzb3VyY2UgPT0gInN0dWR5IDQiKXtkIDwtIGQ0fQoKICAjIGdldCBnZW5kZXIgcGVyIGNvbmRpdGlvbiBhbmQgb3ZlcmFsbAogIGlmKGRhdGFzb3VyY2UgJWluJSBjKCJzdHVkeSAxIiwgInN0dWR5IDIiLCAic3R1ZHkgNCIpKSB7CiAgICBnZW5kZXIgPC0gZGF0YS5mcmFtZShhZGRtYXJnaW5zKHdpdGgoZCwgdGFibGUoY29uZGl0aW9uLCBnZW5kZXIpKSkpICU+JQogICAgICBmaWx0ZXIoZ2VuZGVyICE9ICJTdW0iKSAlPiUKICAgICAgcmVuYW1lKG4gPSBGcmVxKQogIH0KICAKICBpZihkYXRhc291cmNlID09ICJzdHVkeSAzIikgewogICAgZ2VuZGVyIDwtIGRhdGEuZnJhbWUod2l0aChkLCB0YWJsZShnZW5kZXIpKSkgJT4lCiAgICAgIHJlbmFtZShuID0gRnJlcSkgJT4lCiAgICAgIG11dGF0ZShjb25kaXRpb24gPSAiU3VtIikgJT4lCiAgICAgIGRwbHlyOjpzZWxlY3QoY29uZGl0aW9uLCBnZW5kZXIsIG4pCiAgfQogIAogIGlmKGRhdGFzb3VyY2UgJWluJSBjKCJzdHVkeSAxIiwgInN0dWR5IDIiLCAic3R1ZHkgMyIpKSB7CiAgICBnZW5kZXIgPC0gZ2VuZGVyICU+JQogICAgbXV0YXRlKGNvbmRpdGlvbiA9IGZhY3RvcihpZmVsc2UoY29uZGl0aW9uID09ICJTdW0iLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJhbGwiLCBhcy5jaGFyYWN0ZXIoY29uZGl0aW9uKSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldmVscyA9IGMoImJlZXRsZSIsICJyb2JvdCIsICJhbGwiKSkpICU+JQogICAgYXJyYW5nZShjb25kaXRpb24sIGdlbmRlcikgJT4lCiAgICBzcHJlYWQoZ2VuZGVyLCBuKQogIH0KICAKICBpZihkYXRhc291cmNlID09ICJzdHVkeSA0IikgewogICAgZ2VuZGVyIDwtIGdlbmRlciAlPiUKICAgIG11dGF0ZShjb25kaXRpb24gPSBmYWN0b3IoaWZlbHNlKGNvbmRpdGlvbiA9PSAiU3VtIiwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiYWxsIiwgYXMuY2hhcmFjdGVyKGNvbmRpdGlvbikpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXZlbHMgPSBjKGxldmVscyhkJGNvbmRpdGlvbiksICJhbGwiKSkpICU+JQogICAgYXJyYW5nZShjb25kaXRpb24sIGdlbmRlcikgJT4lCiAgICBzcHJlYWQoZ2VuZGVyLCBuKQogIH0KICAKICAjIHJldHVybiBkYXRhZnJhbWUgZm9yIHVzaW5nIGthYmxlCiAgcmV0dXJuKGdlbmRlcikKfQpkZW1vUmFjZSA8LSBmdW5jdGlvbihkYXRhc291cmNlKSB7CgogICMgc2V0IHRhcmdldCBkYXRhc2V0CiAgaWYoZGF0YXNvdXJjZSA9PSAic3R1ZHkgMSIpe2QgPC0gZDF9CiAgaWYoZGF0YXNvdXJjZSA9PSAic3R1ZHkgMiIpe2QgPC0gZDJ9CiAgaWYoZGF0YXNvdXJjZSA9PSAic3R1ZHkgMyIpe2QgPC0gZDN9CiAgaWYoZGF0YXNvdXJjZSA9PSAic3R1ZHkgNCIpe2QgPC0gZDR9CgogICMgZ2V0IHJhY2UgcGVyIGNvbmRpdGlvbiBhbmQgb3ZlcmFsbAogIGlmKGRhdGFzb3VyY2UgJWluJSBjKCJzdHVkeSAxIiwgInN0dWR5IDIiLCAic3R1ZHkgNCIpKSB7CiAgICByYWNlIDwtIGRhdGEuZnJhbWUoYWRkbWFyZ2lucyh3aXRoKGQsIHRhYmxlKGNvbmRpdGlvbiwgcmFjZV9jYXQpKSkpICU+JQogICAgICBmaWx0ZXIocmFjZV9jYXQgIT0gIlN1bSIpICU+JQogICAgICByZW5hbWUobiA9IEZyZXEpCiAgfQogIAogIGlmKGRhdGFzb3VyY2UgPT0gInN0dWR5IDMiKSB7CiAgICByYWNlIDwtIGRhdGEuZnJhbWUod2l0aChkLCB0YWJsZShyYWNlX2NhdCkpKSAlPiUKICAgICAgcmVuYW1lKG4gPSBGcmVxKSAlPiUKICAgICAgbXV0YXRlKGNvbmRpdGlvbiA9ICJTdW0iKSAlPiUKICAgICAgZHBseXI6OnNlbGVjdChjb25kaXRpb24sIHJhY2VfY2F0LCBuKQogIH0KICAKICBpZihkYXRhc291cmNlICVpbiUgYygic3R1ZHkgMSIsICJzdHVkeSAyIiwgInN0dWR5IDMiKSkgewogICAgcmFjZSA8LSByYWNlICU+JQogICAgbXV0YXRlKGNvbmRpdGlvbiA9IGZhY3RvcihpZmVsc2UoY29uZGl0aW9uID09ICJTdW0iLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJhbGwiLCBhcy5jaGFyYWN0ZXIoY29uZGl0aW9uKSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldmVscyA9IGMoImJlZXRsZSIsICJyb2JvdCIsICJhbGwiKSkpICU+JQogICAgYXJyYW5nZShjb25kaXRpb24sIHJhY2VfY2F0KSAlPiUKICAgIHNwcmVhZChyYWNlX2NhdCwgbikKICB9CiAgCiAgaWYoZGF0YXNvdXJjZSA9PSAic3R1ZHkgNCIpIHsKICAgIHJhY2UgPC0gcmFjZSAlPiUKICAgIG11dGF0ZShjb25kaXRpb24gPSBmYWN0b3IoaWZlbHNlKGNvbmRpdGlvbiA9PSAiU3VtIiwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiYWxsIiwgYXMuY2hhcmFjdGVyKGNvbmRpdGlvbikpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXZlbHMgPSBjKGxldmVscyhkJGNvbmRpdGlvbiksICJhbGwiKSkpICU+JQogICAgYXJyYW5nZShjb25kaXRpb24sIHJhY2VfY2F0KSAlPiUKICAgIHNwcmVhZChyYWNlX2NhdCwgbikKICB9CiAgCiAgIyByZXR1cm4gZGF0YWZyYW1lIGZvciB1c2luZyBrYWJsZQogIHJldHVybihyYWNlKQp9CmRlbW9SZWxpZ2lvbiA8LSBmdW5jdGlvbihkYXRhc291cmNlKSB7CgogICMgc2V0IHRhcmdldCBkYXRhc2V0CiAgaWYoZGF0YXNvdXJjZSA9PSAic3R1ZHkgMSIpe2QgPC0gZDF9CiAgaWYoZGF0YXNvdXJjZSA9PSAic3R1ZHkgMiIpe2QgPC0gZDJ9CiAgaWYoZGF0YXNvdXJjZSA9PSAic3R1ZHkgMyIpe2QgPC0gZDN9CgogICMgZ2V0IHJlbGlnaW9uIHBlciBjb25kaXRpb24gYW5kIG92ZXJhbGwKICBpZihkYXRhc291cmNlICVpbiUgYygic3R1ZHkgMSIsICJzdHVkeSAyIikpIHsKICAgIHJlbGlnaW9uIDwtIGRhdGEuZnJhbWUoYWRkbWFyZ2lucyh3aXRoKGQsIHRhYmxlKGNvbmRpdGlvbiwgcmVsaWdpb25fY2F0KSkpKSAlPiUKICAgICAgZmlsdGVyKHJlbGlnaW9uX2NhdCAhPSAiU3VtIikgJT4lCiAgICAgIHJlbmFtZShuID0gRnJlcSkKICB9CiAgCiAgaWYoZGF0YXNvdXJjZSA9PSAic3R1ZHkgMyIpIHsKICAgIHJlbGlnaW9uIDwtIGRhdGEuZnJhbWUod2l0aChkLCB0YWJsZShyZWxpZ2lvbl9jYXQpKSkgJT4lCiAgICAgIHJlbmFtZShuID0gRnJlcSkgJT4lCiAgICAgIG11dGF0ZShjb25kaXRpb24gPSAiU3VtIikgJT4lCiAgICAgIGRwbHlyOjpzZWxlY3QoY29uZGl0aW9uLCByZWxpZ2lvbl9jYXQsIG4pCiAgfQogIAogIGlmKGRhdGFzb3VyY2UgJWluJSBjKCJzdHVkeSAxIiwgInN0dWR5IDIiLCAic3R1ZHkgMyIpKSB7CiAgICByZWxpZ2lvbiA8LSByZWxpZ2lvbiAlPiUKICAgIG11dGF0ZShjb25kaXRpb24gPSBmYWN0b3IoaWZlbHNlKGNvbmRpdGlvbiA9PSAiU3VtIiwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiYWxsIiwgYXMuY2hhcmFjdGVyKGNvbmRpdGlvbikpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXZlbHMgPSBjKCJiZWV0bGUiLCAicm9ib3QiLCAiYWxsIikpKSAlPiUKICAgIGFycmFuZ2UoY29uZGl0aW9uLCByZWxpZ2lvbl9jYXQpICU+JQogICAgc3ByZWFkKHJlbGlnaW9uX2NhdCwgbikKICB9CiAgCiAgIyByZXR1cm4gZGF0YWZyYW1lIGZvciB1c2luZyBrYWJsZQogIGlmKGRhdGFzb3VyY2UgPT0gInN0dWR5IDQiKXsKICAgIHN0b3AoIlJlbGlnaW9uIGluZm9ybWF0aW9uIG5vdCBhdmFpbGFibGUgZm9yIFN0dWR5IDQiKQogIH0gZWxzZSB7cmV0dXJuKHJlbGlnaW9uKX0KfQpkZW1vRWR1Y2F0aW9uIDwtIGZ1bmN0aW9uKGRhdGFzb3VyY2UpIHsKCiAgIyBzZXQgdGFyZ2V0IGRhdGFzZXQKICBpZihkYXRhc291cmNlID09ICJzdHVkeSA0Iil7ZCA8LSBkNH0KICAKICAjIGdldCBlZHVjYXRpb24gcGVyIGNvbmRpdGlvbiBhbmQgb3ZlcmFsbAogIGlmKGRhdGFzb3VyY2UgPT0gInN0dWR5IDQiKSB7CiAgICBlZHVjYXRpb24gPC0gCiAgICAgIGRhdGEuZnJhbWUoYWRkbWFyZ2lucyh3aXRoKGQsIHRhYmxlKGNvbmRpdGlvbiwgZWR1Y2F0aW9uKSkpKSAlPiUKICAgICAgZmlsdGVyKGVkdWNhdGlvbiAhPSAiU3VtIikgJT4lCiAgICAgIHJlbmFtZShuID0gRnJlcSkgJT4lCiAgICAgIG11dGF0ZShjb25kaXRpb24gPSBmYWN0b3IoaWZlbHNlKGNvbmRpdGlvbiA9PSAiU3VtIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImFsbCIsIGFzLmNoYXJhY3Rlcihjb25kaXRpb24pKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXZlbHMgPSBjKGxldmVscyhkJGNvbmRpdGlvbiksICJhbGwiKSksCiAgICAgICAgICAgICBlZHVjYXRpb24gPSBmYWN0b3IoZWR1Y2F0aW9uLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldmVscyA9IGMoMTo3LCAwKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYWJlbHMgPSBjKCJzb21lX0hTIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJIU19kaXBsb21hIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzb21lX2NvbGxlZ2UiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImFzc29jaWF0ZXMiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImJhY2hlbG9ycyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAic29tZV9ncmFkIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJncmFkIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJwcmVmX25vIikpKSAlPiUKICAgICAgYXJyYW5nZShjb25kaXRpb24sIGVkdWNhdGlvbikgJT4lCiAgICAgIHNwcmVhZChlZHVjYXRpb24sIG4pCiAgfQogIAogICMgcmV0dXJuIGRhdGFmcmFtZSBmb3IgdXNpbmcga2FibGUKICBpZihkYXRhc291cmNlICVpbiUgYygic3R1ZHkgMSIsICJzdHVkeSAyIiwgInN0dWR5IDMiKSl7CiAgICBzdG9wKCJFZHVjYXRpb24gaW5mb3JtYXRpb24gbm90IGF2YWlsYWJsZSBmb3IgU3R1ZGllcyAxLTMiKQogIH0gZWxzZSB7cmV0dXJuKGVkdWNhdGlvbil9Cn0KCiMgcGxvdHRpbmcgZnVuY3Rpb25zCm1ha2VGYWNldExhYnMgPC0gZnVuY3Rpb24oZGZfcGxvdHRpbmcpIHsKICBmYWNldF9sYWJlbHMgPC0gYXJyYXkoKQogIGRmX3Bsb3R0aW5nIDwtIGRmX3Bsb3R0aW5nICU+JSBtdXRhdGUoY29uZGl0aW9uID0gZmFjdG9yKGNvbmRpdGlvbikpCiAgZm9yKGkgaW4gMTpsZW5ndGgobGV2ZWxzKGRmX3Bsb3R0aW5nJGNvbmRpdGlvbikpKSB7CiAgICBkZiA8LSBkZl9wbG90dGluZyAlPiUgZmlsdGVyKGNvbmRpdGlvbiA9PSBsZXZlbHMoZGZfcGxvdHRpbmckY29uZGl0aW9uKVtpXSkgJT4lCiAgICAgIHNlbGVjdChjb25kaXRpb24sIG4pICU+JSB1bmlxdWUoKQogICAgZmFjZXRfbGFiZWxzW2ldIDwtIHBhc3RlMChkZiRjb25kaXRpb24sICIgKG4gPSAiLCBkZiRuLCAiKSIpCiAgfQogIG5hbWVzKGZhY2V0X2xhYmVscykgPC0gbGV2ZWxzKGRmX3Bsb3R0aW5nJGNvbmRpdGlvbikKICByZXR1cm4oZmFjZXRfbGFiZWxzKQp9CmBgYAoKYGBge3IgbW9kZWxpbmcgZGVjaXNpb25zfQojIHJlbW92ZSBvdXRsaWVycz8KY2hvc2VuT3V0bGllckhhbmRsaW5nIDwtICJrZWVwIgojIGNob3Nlbk91dGxpZXJIYW5kbGluZyA8LSAicmVtb3ZlIgoKIyBleGNsdWRlIGFueSBjb25kaXRpb25zIGluIHN0dWR5IDQ/CmNob3NlbkV4Y2x1ZGUgPC0gIm5vbmUiCiMgY2hvc2VuRXhjbHVkZSA8LSBjKCJzdGFwbGVyIiwgImNhciIsICJjb21wdXRlciIpCgojIGV4Y2x1ZGUgYW55IGl0ZW1zPwpjaG9zZW5FeGNsdWRlSXRlbSA8LSAibm9uZSIKIyBjaG9zZW5FeGNsdWRlSXRlbSA8LSAiY29tcHV0YXRpb25zIgoKIyBOT1RFOiBhbHdheXMgY2hvb3NlIG1pbmltYWwgcmVzaWR1YWwgKGZtID0gIm1pbnJlcyIpIGluc3RlYWQgb2YgTUwgYmVjYXVzZSBvZiBub24tbm9ybWFsaXR5CgojIGZvciBFRkFzLCB3aGF0IGtpbmQgb2YgY29ycmVsYXRpb24/CmNob3NlbkNvclR5cGUgPC0gImNvciIgIyBwZWFyc29uIGNvcnJlbGF0aW9uCiMgY2hvc2VuQ29yVHlwZSA8LSAicG9seSIgIyBwb2x5Y2hvcmljIGNvcnJlbGF0aW9uCgojIGZvciBFRkFzLCB3aGF0IGtpbmQgb2Ygcm90YXRpb24/CmNob3NlblJvdFR5cGUgPC0gInZhcmltYXgiICMgdmFyaW1heCByb3RhdGlvbgojIGNob3NlblJvdFR5cGUgPC0gIm9ibGltaW4iICMgb2JsaW1pbiByb3RhdGlvbgojIGNob3NlblJvdFR5cGUgPC0gIm5vbmUiICMgbm8gcm90YXRpb24KCmRhdGEuZnJhbWUoImNvbmRpdGlvbnNFeGNsdWRlZCIgPSBjaG9zZW5FeGNsdWRlLAogICAgICAgICAgICJvdXRsaWVySGFuZGxpbmciID0gY2hvc2VuT3V0bGllckhhbmRsaW5nLAogICAgICAgICAgICJFRkFfY29ycmVsYXRpb24iID0gY2hvc2VuQ29yVHlwZSwKICAgICAgICAgICAiRUZBX3JvdGF0aW9uIiA9IGNob3NlblJvdFR5cGUpCmBgYAoKPHAgc3R5bGU9InRleHQtYWxpZ246cmlnaHQiPjxhIGhyZWY9IiNoZWFkZXIiPmJhY2sgdG8gVE9DPC9hPjwvcD4KCiMgRGF0YSBwcmVwYXJhdGlvbgoKYGBge3IgZGF0YSB1cGxvYWQsIGluY2x1ZGUgPSBGfQojIHN0dWR5IDEgKDIwMTUtMTItMTUsIDIgY29uZGl0aW9ucywgYmV0d2Vlbi1zdWJqZWN0cykKZF9yYXdfc3R1ZHkxIDwtIHJlYWQuY3N2KCJodHRwczovL29zZi5pby8yOXZuZy9kb3dubG9hZCIpICU+JQogIG11dGF0ZShzdHVkeSA9ICJzdHVkeSAxIikKCiMgc3R1ZHkgMiAoMjAxNi0wMS0xMiwgMiBjb25kaXRpb25zLCBiZXR3ZWVuLXN1YmplY3RzIC0gUkVQTElDQVRJT04pCmRfcmF3X3N0dWR5MiA8LSByZWFkLmNzdigiaHR0cHM6Ly9vc2YuaW8vZzc2aGovZG93bmxvYWQiKSAlPiUKICBtdXRhdGUoc3R1ZHkgPSAic3R1ZHkgMiIpCgojIHN0dWR5IDMgKDIwMTYtMDEtMTAsIDIgY29uZGl0aW9ucywgd2l0aGluLXN1YmplY3RzKQpkX3Jhd19zdHVkeTMgPC0gcmVhZC5jc3YoImh0dHBzOi8vb3NmLmlvL2VweWtmL2Rvd25sb2FkIikgJT4lCiAgbXV0YXRlKHN0dWR5ID0gInN0dWR5IDMiKQoKIyBzdHVkeSA0ICgyMDE2LTAxLTE0LCAyMSBjb25kaXRpb25zLCBiZXR3ZWVuLXN1YmplY3RzKQpkX3Jhd19zdHVkeTQgPC0gcmVhZC5jc3YoImh0dHBzOi8vb3NmLmlvL2tkemdlL2Rvd25sb2FkIikgJT4lCiAgbXV0YXRlKHN0dWR5ID0gInN0dWR5IDQiKQpgYGAKCmBgYHtyIGRhdGEgY2xlYW51cH0KIyBjbGVhbiB1cCBkYXRhc2V0cwpkMSA8LSBjbGVhbnVwKCJzdHVkeSAxIikKZDIgPC0gY2xlYW51cCgic3R1ZHkgMiIpCmQzIDwtIGNsZWFudXAoInN0dWR5IDMiKQpkNCA8LSBjbGVhbnVwKCJzdHVkeSA0IikKYGBgCgpgYGB7ciBkYXRhZnJhbWVzIGZvciBkaW1lbnNpb24gcmVkdWNhdGlvbn0KIyBtYWtlIGRhdGFmcmFtZXMgZm9yIHMxCiMgZDFfYmVldGxlIDwtIG1ha2VEUkRGKCJzdHVkeSAxIiwgImJlZXRsZSIpCiMgZDFfcm9ib3QgPC0gbWFrZURSREYoInN0dWR5IDEiLCAicm9ib3QiKQpkMV9hbGwgPC0gbWFrZURSREYoInN0dWR5IDEiLCAiYWxsIikKCiMgbWFrZSBkYXRhZnJhbWVzIGZvciBzdHVkeSAyCiMgZDJfYmVldGxlIDwtIG1ha2VEUkRGKCJzdHVkeSAyIiwgImJlZXRsZSIpCiMgZDJfcm9ib3QgPC0gbWFrZURSREYoInN0dWR5IDIiLCAicm9ib3QiKQpkMl9hbGwgPC0gbWFrZURSREYoInN0dWR5IDIiLCAiYWxsIikKCiMgbWFrZSBkYXRhZnJhbWVzIGZvciBzdHVkeSAzCiMgZDNfYmVldGxlIDwtIG1ha2VEUkRGKCJzdHVkeSAzIiwgImJlZXRsZSIpCiMgZDNfcm9ib3QgPC0gbWFrZURSREYoInN0dWR5IDMiLCAicm9ib3QiKQpkM19hbGwgPC0gbWFrZURSREYoInN0dWR5IDMiLCAiYWxsIikKCiMgbWFrZSBkYXRhZnJhbWVzIGZvciBzdHVkeSA0CmQ0X2FsbCA8LSBtYWtlRFJERigic3R1ZHkgNCIsICJhbGwiKQpgYGAKCjxwIHN0eWxlPSJ0ZXh0LWFsaWduOnJpZ2h0Ij48YSBocmVmPSIjaGVhZGVyIj5iYWNrIHRvIFRPQzwvYT48L3A+CgojIEFuYWx5c2lzIHBsYW4KCkZvciBhbGwgc3R1ZGllcyB3ZSBjb25kdWN0IGV4cGxvcmF0b3J5IGZhY3RvciBhbmFseXNlcyB1c2luZyBQZWFyc29uIGNvcnJlbGF0aW9ucyB0byBmaW5kIG1pbmltdW0gcmVzaWR1YWwgc29sdXRpb25zLiAKCkZvciBlYWNoIHN0dWR5LCB3ZSBmaXJzdCBleGFtaW5lIG1heGltYWwgdW5yb3RhdGVkIGFuZCByb3RhdGVkIHNvbHV0aW9ucy4gVG8gZGV0ZXJtaW5lIHRoZSBtYXhpbXVtIG51bWJlciBvZiBmYWN0b3JzIHRvIGV4dHJhY3QsIHdlIHVzZSB0aGUgZm9sbG93aW5nIHJ1bGUgb2YgdGh1bWI6IFdpdGggJHAkIG9ic2VydmF0aW9ucyBwZXIgcGFydGljaXBhbnQsIHdlIGNhbiBleHRyYWN0IGEgbWF4aW11bSBvZiAkayQgZmFjdG9ycywgd2hlcmUgJChwLWspKjIgPiBwK2skLCBpLmUuLCAkayA8IHAvMyQuIFRodXMsIHdpdGggNDAgbWVudGFsIGNhcGFjaXR5IGl0ZW1zLCB3ZSBjYW4gZXh0cmFjdCBhIG1heGltdW0gb2YgMTMgZmFjdG9ycy4KClRvIGRldGVybWluZSBob3cgbWFueSBmYWN0b3JzIHRvIHJldGFpbiwgd2UgdXNlIHRoZSBmb2xsb3dpbmcgcHJlc2V0IHJldGVudGlvbiBjcml0ZXJpYSwgY29uc2lkZXJpbmcgdGhlIHVucm90YXRlZCBtYXhpbWFsIHNvbHV0aW9uICh1bmxlc3Mgb3RoZXJ3aXNlIG5vdGVkKToKCiAgLSBFYWNoIGZhY3RvciBtdXN0IGhhdmUgYW4gZWlnZW52YWx1ZSA+MS4wLgogIC0gRWFjaCBmYWN0b3IgbXVzdCBpbmRpdmlkdWFsbHkgYWNjb3VudCBmb3IgPjUlIG9mIHRoZSB0b3RhbCB2YXJpYW5jZSBpbiB0aGUgbWF4aW1hbCBtb2RlbC4KICAtIEFmdGVyIHJvdGF0aW9uLCBlYWNoIGZhY3RvciBtdXN0IGJlIHRoZSBkb21pbmFudCBmYWN0b3IgKGkuZS4sIHRoZSBmYWN0b3Igd2l0aCB0aGUgaGlnaGVzdCBmYWN0b3IgbG9hZGluZykgZm9yIOKJpTEgbWVudGFsIGNhcGFjaXR5IGl0ZW0uCgpXZSB0aGVuIGV4YW1pbmUgYW5kIGludGVycHJldCB2YXJpbWF4LXJvdGF0ZWQgc29sdXRpb25zLCBleHRyYWN0aW5nIG9ubHkgdGhlIG51bWJlciBvZiBmYWN0b3JzIHRoYXQgbWVldCB0aGVzZSBjcml0ZXJpYS4KCipOb3RlKjogRm9yIFN0dWRpZXMgMS0yLCB3ZSBpbml0aWFsbHkgcGxhbm5lZCB0byBjb25kdWN0IGRpbWVuc2lvbiByZWR1Y3Rpb24gYW5hbHlzZXMgZm9yIGVhY2ggY29uZGl0aW9uIChiZWV0bGUgdnMuIHJvYm90KSBzZXBhcmF0ZWx5LiBIb3dldmVyLCB3ZSBub3cgY29uc2lkZXIgdGhpcyBhbmFseXNpcyBwbGFuIHRvIGhhdmUgYmVlbiBmdW5kYW1lbnRhbGx5IGZsYXdlZDogRWFjaCBvZiB0aGVzZSBzZXBhcmF0ZSBhbmFseXNlcyBpcyBvbmx5IGNhcGFibGUgb2Ygc3VyZmFjaW5nIGZhY3RvcnMgdGhhdCBoaWdobGlnaHQgc3Vic3RhbnRpYWwgZGlzYWdyZWVtZW50IGFtb25nIHBhcnRpY2lwYW50cyB3aXRoaW4gdGhhdCBjb25kaXRpb24gdGh1cyBmYWlsaW5nIHRvIGNhcHR1cmUga2V5IGRpZmZlcmVuY2VzIGluIGF0dHJpYnV0aW9ucyBvZiBtZW50YWwgY2FwYWNpdGllcyB0byBiZWV0bGVzIHZzLiByb2JvdHMsIHdpdGggbm8gZm9ybWFsIG1lYW5zIG9mIHN5bnRoZXNpemluZyByZXN1bHRzIGFjcm9zcyBjb25kaXRpb25zLiBOb25ldGhlbGVzcywgdGhlIHJlc3VsdHMgb2YgdGhlc2UgYW5hbHlzZXMgYXJlIGdlbmVyYWxseSBjb25zaXN0ZW50IHdpdGggdGhlIGZpbmRpbmdzIHJlcG9ydGVkIGhlcmU6IFRoZSBtb3N0IHByb21pbmVudCBhbmQgcmVsaWFibGUgZmluZGluZyB3aXRoaW4gZWFjaCBjb25kaXRpb24gaXMgdGhhdCBwYXJ0aWNpcGFudHMgZGlzdGluZ3Vpc2ggYmV0d2VlbiBlbW90aW9uYWwgYW5kIHBlcmNlcHR1YWwgdmFyaWV0aWVzIG9mIGV4cGVyaWVuY2UuIFNlZSA8YSBocmVmPSJodHRwczovL29zZi5pby96ZDNtdSIsIHRhcmdldD0iYmxhbmsiPmh0dHBzOi8vb3NmLmlvL3pkM211PC9hPiBmb3IgdGhlIHByZXJlZ2lzdGVyZWQgYW5hbHlzZXMsIGluY2x1ZGluZyBhbmFseXNpcyBzY3JpcHRzLgoKIyBTdHVkeSAxCgpEZXNpZ246IDIgY29uZGl0aW9ucyAoYmVldGxlLCByb2JvdCksIGJldHdlZW4tc3ViamVjdHMKRGF0ZSBjb25kdWN0ZWQ6IDIwMTUtMTItMTUKCiMjIERlbW9ncmFwaGljcwoKYGBge3IgczEgZGVtb2dyYXBoaWNzfQojIGV4YW1pbmUgZXhjbHVzaW9uCmV4Y2x1ZGVkQ291bnRzKCJzdHVkeSAxIikKCiMgbWFrZSBkZW1vZ3JhcGhpY3MgdGFibGVzCmRlbW9TYW1wbGVTaXplKCJzdHVkeSAxIikKZGVtb0R1cmF0aW9uKCJzdHVkeSAxIikKZGVtb0FnZSgic3R1ZHkgMSIpCmRlbW9HZW5kZXIoInN0dWR5IDEiKQpkZW1vUmFjZSgic3R1ZHkgMSIpCmRlbW9SZWxpZ2lvbigic3R1ZHkgMSIpCmBgYAoKPHAgc3R5bGU9InRleHQtYWxpZ246cmlnaHQiPjxhIGhyZWY9IiNoZWFkZXIiPmJhY2sgdG8gVE9DPC9hPjwvcD4KCiMjIEV4cGxvcmF0b3J5IGZhY3RvciBhbmFseXNpcwoKIyMjIFN0ZXAgMTogUnVuIG1heGltYWwgRUZBICh3aXRob3V0IGFuZCB3aXRoIHJvdGF0aW9uKQoKYGBge3IgczEgYWxsIG5vIHJvdGF0aW9ufQojIGV4YW1pbmUgc2NyZWUgcGxvdAojIGZhLnBhcmFsbGVsKGQxX2FsbCkKCiMgcnVuIEVGQSB3aXRob3V0IHJvdGF0aW9uIHdpdGggTiBmYWN0b3JzCmVmYV9kMV9hbGxfdW5yb3RhdGVkIDwtIGZhKGQxX2FsbCwgMTMsIHJvdGF0ZSA9ICJub25lIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgY29yID0gY2hvc2VuQ29yVHlwZSwgZm0gPSAibWlucmVzIikKcHJpbnQoZWZhX2QxX2FsbF91bnJvdGF0ZWQpCmBgYAoKYGBge3IgczEgaG93IG1hbnkgZmFjdG9ycywgaW5jbHVkZSA9IEZ9CiMgZXhhbWluZSBlaWdlbnZhbHVlcyBhbmQgdmFyaWFuY2UgZXhwbGFpbmVkCmVmYV9kMV9hbGxfdW5yb3RhdGVkX2VpZ2VudmFsdWVzIDwtIHByaW50KGVmYV9kMV9hbGxfdW5yb3RhdGVkKSRWYWNjb3VudGVkICU+JQogIHQoKSAlPiUKICBkYXRhLmZyYW1lKCkKCiMgY291bnQgZmFjdG9ycyB3aXRoIGVpZ2VudmFsdWVzID4gMSBhbmQgdmFyaWFuY2UgZXhwbGFpbmVkID4gNSUKZWZhX2QxX2FsbF91bnJvdGF0ZWRfbmZhY3RvcnMgPC0gZWZhX2QxX2FsbF91bnJvdGF0ZWRfZWlnZW52YWx1ZXMgJT4lCiAgZmlsdGVyKFNTLmxvYWRpbmdzID4gMSwgUHJvcG9ydGlvbi5FeHBsYWluZWQgPiAwLjA1KSAlPiUKICBjb3VudCgpICU+JQogIGFzLm51bWVyaWMoKQplZmFfZDFfYWxsX3Vucm90YXRlZF9uZmFjdG9ycwpgYGAKCmBgYHtyIHMxIGFsbCByb3RhdGlvbn0KZWZhX2QxX2FsbF9yb3RhdGVkX21heCA8LSBmYShkMV9hbGwsIDEzLCByb3RhdGUgPSBjaG9zZW5Sb3RUeXBlLAogICAgICAgICAgICAgICAgICAgICAgICAgICBjb3IgPSBjaG9zZW5Db3JUeXBlLCBmbSA9ICJtaW5yZXMiKQoKZWZhX2QxX2FsbF9yb3RhdGVkIDwtIGZhKGQxX2FsbCwgZWZhX2QxX2FsbF91bnJvdGF0ZWRfbmZhY3RvcnMsIHJvdGF0ZSA9IGNob3NlblJvdFR5cGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvciA9IGNob3NlbkNvclR5cGUsIGZtID0gIm1pbnJlcyIpCgojIGNoZWNrIHRoYXQgZWFjaCBvZiB0aGVzZSBmYWN0b3JzIGlzIHRoZSBkb21pbmFudCBmYWN0b3IgZm9yIGF0IGxlYXN0IG9uZSBtZW50YWwgY2FwYWNpdHkgaXRlbQplZmFfZDFfYWxsX3JvdGF0ZWRfbG9hZGluZ3MgPC0gZmEuc29ydChsb2FkaW5ncyhlZmFfZDFfYWxsX3JvdGF0ZWQpW10pICU+JQogIGRhdGEuZnJhbWUoKSAlPiUKICByb3duYW1lc190b19jb2x1bW4oImNhcGFjaXR5IikgJT4lCiAgZ2F0aGVyKGZhY3RvciwgbG9hZGluZywgLWNhcGFjaXR5KSAlPiUKICBtdXRhdGUobG9hZGluZ19hYnMgPSBhYnMobG9hZGluZykpICU+JQogIGdyb3VwX2J5KGNhcGFjaXR5KSAlPiUKICB0b3BfbigxLCBsb2FkaW5nX2FicykgJT4lCiAgdW5ncm91cCgpCmVmYV9kMV9hbGxfcm90YXRlZF9sb2FkaW5ncwoKIyBkcm9wIGFueSBmYWN0b3JzIHdoZXJlIG4gPCAxCmVmYV9kMV9hbGxfcm90YXRlZF9sb2FkaW5ncyAlPiUgCiAgY291bnQoZmFjdG9yKSAlPiUgCiAgZmlsdGVyKG4gPiAwKQoKIyBzZXQgbnVtYmVyIG9mIGZhY3RvcnMgdG8gZXh0cmFjdApuZmFjdG9yc19kMV9hbGwgPC0gZWZhX2QxX2FsbF9yb3RhdGVkX2xvYWRpbmdzICU+JSAKICBjb3VudChmYWN0b3IpICU+JSAKICBmaWx0ZXIobiA+IDApICU+JQogIG5yb3coKQpuZmFjdG9yc19kMV9hbGwKYGBgCgojIyMgU3RlcCAyOiBSdW4gRUZBIHdpdGggdmFyaW1heCByb3RhdGlvbgoKYGBge3IgczEgYWxsIHZhcmltYXggcm90YXRpb259CiMgcnVuIEVGQSB3aXRoIHJvdGF0aW9uIHdpdGggTiBmYWN0b3JzCmVmYV9kMV9hbGxfcm90YXRlZE4gPC0gZmEoZDFfYWxsLCBuZmFjdG9yc19kMV9hbGwsIAogICAgICAgICAgICAgICAgICAgICAgICAgIHJvdGF0ZSA9IGNob3NlblJvdFR5cGUsIGNvciA9IGNob3NlbkNvclR5cGUsIGZtID0gIm1pbnJlcyIpCnByaW50KGVmYV9kMV9hbGxfcm90YXRlZE4pCgojIGdldCBsb2FkaW5ncyBmb3IgZWFjaCBmYWN0b3IKZWZhX2QxX2FsbF9yb3RhdGVkTl9sb2FkaW5ncyA8LSBsb2FkaW5ncyhlZmFfZDFfYWxsX3JvdGF0ZWROKVtdICU+JQogIGRhdGEuZnJhbWUoKSAlPiUgCiAgcm93bmFtZXNfdG9fY29sdW1uKHZhciA9ICJtYyIpCmBgYAoKPHAgc3R5bGU9InRleHQtYWxpZ246cmlnaHQiPjxhIGhyZWY9IiNoZWFkZXIiPmJhY2sgdG8gVE9DPC9hPjwvcD4KCiMjIyMgRmFjdG9yIGxvYWRpbmdzIHRhYmxlCgpgYGB7ciBzMSBsb2FkaW5ncyB0YWJsZX0KZGF0YS5mcmFtZShsb2FkaW5ncyhmYS5zb3J0KGVmYV9kMV9hbGxfcm90YXRlZE4pKVtdKSAlPiUKICByb3duYW1lc190b19jb2x1bW4oImNhcGFjaXR5IikgJT4lCiAgbXV0YXRlX2F0KHZhcnMoc3RhcnRzX3dpdGgoIk0iKSksIGZ1bnMocm91bmQyKSkKYGBgCgojIFN0dWR5IDIKCkRlc2lnbjogMiBjb25kaXRpb25zIChiZWV0bGUsIHJvYm90KSwgYmV0d2Vlbi1zdWJqZWN0cyAocmVwbGljYXRpb24gb2YgU3R1ZHkgMSkKRGF0ZSBjb25kdWN0ZWQ6IDIwMTYtMDEtMTIKCiMjIERlbW9ncmFwaGljcwoKYGBge3IgczIgZGVtb2dyYXBoaWNzfQojIGV4YW1pbmUgZXhjbHVzaW9uCmV4Y2x1ZGVkQ291bnRzKCJzdHVkeSAyIikKCiMgbWFrZSBkZW1vZ3JhcGhpY3MgdGFibGVzCmRlbW9TYW1wbGVTaXplKCJzdHVkeSAyIikKZGVtb0R1cmF0aW9uKCJzdHVkeSAyIikKZGVtb0FnZSgic3R1ZHkgMiIpCmRlbW9HZW5kZXIoInN0dWR5IDIiKQpkZW1vUmFjZSgic3R1ZHkgMiIpCmRlbW9SZWxpZ2lvbigic3R1ZHkgMiIpCmBgYAoKPHAgc3R5bGU9InRleHQtYWxpZ246cmlnaHQiPjxhIGhyZWY9IiNoZWFkZXIiPmJhY2sgdG8gVE9DPC9hPjwvcD4KCiMjIEV4cGxvcmF0b3J5IGZhY3RvciBhbmFseXNpcwoKIyMjIFN0ZXAgMTogUnVuIG1heGltYWwgRUZBICh3aXRob3V0IGFuZCB3aXRoIHJvdGF0aW9uKQoKYGBge3IgczIgYWxsIG5vIHJvdGF0aW9ufQojIGV4YW1pbmUgc2NyZWUgcGxvdAojIGZhLnBhcmFsbGVsKGQyX2FsbCkKCiMgcnVuIEVGQSB3aXRob3V0IHJvdGF0aW9uIHdpdGggTiBmYWN0b3JzCmVmYV9kMl9hbGxfdW5yb3RhdGVkIDwtIGZhKGQyX2FsbCwgMTMsIHJvdGF0ZSA9ICJub25lIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgY29yID0gY2hvc2VuQ29yVHlwZSwgZm0gPSAibWlucmVzIikKcHJpbnQoZWZhX2QyX2FsbF91bnJvdGF0ZWQpCmBgYAoKYGBge3IgczIgaG93IG1hbnkgZmFjdG9ycywgaW5jbHVkZSA9IEZ9CiMgZXhhbWluZSBlaWdlbnZhbHVlcyBhbmQgdmFyaWFuY2UgZXhwbGFpbmVkCmVmYV9kMl9hbGxfdW5yb3RhdGVkX2VpZ2VudmFsdWVzIDwtIHByaW50KGVmYV9kMl9hbGxfdW5yb3RhdGVkKSRWYWNjb3VudGVkICU+JQogIHQoKSAlPiUKICBkYXRhLmZyYW1lKCkKCiMgY291bnQgZmFjdG9ycyB3aXRoIGVpZ2VudmFsdWVzID4gMSBhbmQgdmFyaWFuY2UgZXhwbGFpbmVkID4gNSUKZWZhX2QyX2FsbF91bnJvdGF0ZWRfbmZhY3RvcnMgPC0gZWZhX2QyX2FsbF91bnJvdGF0ZWRfZWlnZW52YWx1ZXMgJT4lCiAgZmlsdGVyKFNTLmxvYWRpbmdzID4gMSwgUHJvcG9ydGlvbi5FeHBsYWluZWQgPiAwLjA1KSAlPiUKICBjb3VudCgpICU+JQogIGFzLm51bWVyaWMoKQplZmFfZDJfYWxsX3Vucm90YXRlZF9uZmFjdG9ycwpgYGAKCmBgYHtyIHMyIGFsbCByb3RhdGlvbn0KZWZhX2QyX2FsbF9yb3RhdGVkX21heCA8LSBmYShkMl9hbGwsIDEzLCByb3RhdGUgPSBjaG9zZW5Sb3RUeXBlLAogICAgICAgICAgICAgICAgICAgICAgICAgICBjb3IgPSBjaG9zZW5Db3JUeXBlLCBmbSA9ICJtaW5yZXMiKQoKZWZhX2QyX2FsbF9yb3RhdGVkIDwtIGZhKGQyX2FsbCwgZWZhX2QyX2FsbF91bnJvdGF0ZWRfbmZhY3RvcnMsIHJvdGF0ZSA9IGNob3NlblJvdFR5cGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvciA9IGNob3NlbkNvclR5cGUsIGZtID0gIm1pbnJlcyIpCgojIGNoZWNrIHRoYXQgZWFjaCBvZiB0aGVzZSBmYWN0b3JzIGlzIHRoZSBkb21pbmFudCBmYWN0b3IgZm9yIGF0IGxlYXN0IG9uZSBtZW50YWwgY2FwYWNpdHkgaXRlbQplZmFfZDJfYWxsX3JvdGF0ZWRfbG9hZGluZ3MgPC0gZmEuc29ydChsb2FkaW5ncyhlZmFfZDJfYWxsX3JvdGF0ZWQpW10pICU+JQogIGRhdGEuZnJhbWUoKSAlPiUKICByb3duYW1lc190b19jb2x1bW4oImNhcGFjaXR5IikgJT4lCiAgZ2F0aGVyKGZhY3RvciwgbG9hZGluZywgLWNhcGFjaXR5KSAlPiUKICBtdXRhdGUobG9hZGluZ19hYnMgPSBhYnMobG9hZGluZykpICU+JQogIGdyb3VwX2J5KGNhcGFjaXR5KSAlPiUKICB0b3BfbigxLCBsb2FkaW5nX2FicykgJT4lCiAgdW5ncm91cCgpCmVmYV9kMl9hbGxfcm90YXRlZF9sb2FkaW5ncwoKIyBkcm9wIGFueSBmYWN0b3JzIHdoZXJlIG4gPCAxCmVmYV9kMl9hbGxfcm90YXRlZF9sb2FkaW5ncyAlPiUgCiAgY291bnQoZmFjdG9yKSAlPiUgCiAgZmlsdGVyKG4gPiAwKQoKIyBzZXQgbnVtYmVyIG9mIGZhY3RvcnMgdG8gZXh0cmFjdApuZmFjdG9yc19kMl9hbGwgPC0gZWZhX2QyX2FsbF9yb3RhdGVkX2xvYWRpbmdzICU+JSAKICBjb3VudChmYWN0b3IpICU+JSAKICBmaWx0ZXIobiA+IDApICU+JQogIG5yb3coKQpuZmFjdG9yc19kMl9hbGwKYGBgCgojIyMgU3RlcCAyOiBSdW4gRUZBIHdpdGggdmFyaW1heCByb3RhdGlvbgoKYGBge3IgczIgYWxsIHZhcmltYXggcm90YXRpb259CiMgcnVuIEVGQSB3aXRoIHJvdGF0aW9uIHdpdGggTiBmYWN0b3JzCmVmYV9kMl9hbGxfcm90YXRlZE4gPC0gZmEoZDJfYWxsLCBuZmFjdG9yc19kMl9hbGwsIAogICAgICAgICAgICAgICAgICAgICAgICAgIHJvdGF0ZSA9IGNob3NlblJvdFR5cGUsIGNvciA9IGNob3NlbkNvclR5cGUsIGZtID0gIm1pbnJlcyIpCnByaW50KGVmYV9kMl9hbGxfcm90YXRlZE4pCgojIGdldCBsb2FkaW5ncyBmb3IgZWFjaCBmYWN0b3IKZWZhX2QyX2FsbF9yb3RhdGVkTl9sb2FkaW5ncyA8LSBsb2FkaW5ncyhlZmFfZDJfYWxsX3JvdGF0ZWROKVtdICU+JQogIGRhdGEuZnJhbWUoKSAlPiUgCiAgcm93bmFtZXNfdG9fY29sdW1uKHZhciA9ICJtYyIpCmBgYAoKPHAgc3R5bGU9InRleHQtYWxpZ246cmlnaHQiPjxhIGhyZWY9IiNoZWFkZXIiPmJhY2sgdG8gVE9DPC9hPjwvcD4KCiMjIyMgRmFjdG9yIGxvYWRpbmdzIHRhYmxlCgpgYGB7ciBzMiBsb2FkaW5ncyB0YWJsZX0KZGF0YS5mcmFtZShsb2FkaW5ncyhmYS5zb3J0KGVmYV9kMl9hbGxfcm90YXRlZE4pKVtdKSAlPiUKICByb3duYW1lc190b19jb2x1bW4oImNhcGFjaXR5IikgJT4lCiAgbXV0YXRlX2F0KHZhcnMoc3RhcnRzX3dpdGgoIk0iKSksIGZ1bnMocm91bmQyKSkKYGBgCgojIFN0dWR5IDMgCgpEZXNpZ246IDIgY29uZGl0aW9ucyAoYmVldGxlLCByb2JvdCksIHdpdGhpbi1zdWJqZWN0cwpEYXRlIGNvbmR1Y3RlZDogMjAxNi0wMS0xMAoKIyMgRGVtb2dyYXBoaWNzCgpgYGB7ciBzMyBkZW1vZ3JhcGhpY3N9CiMgZXhhbWluZSBleGNsdXNpb24KZXhjbHVkZWRDb3VudHMoInN0dWR5IDMiKQoKIyBtYWtlIGRlbW9ncmFwaGljcyB0YWJsZXMKZGVtb1NhbXBsZVNpemUoInN0dWR5IDMiKQpkZW1vRHVyYXRpb24oInN0dWR5IDMiKQpkZW1vQWdlKCJzdHVkeSAzIikKZGVtb0dlbmRlcigic3R1ZHkgMyIpCmRlbW9SYWNlKCJzdHVkeSAzIikKZGVtb1JlbGlnaW9uKCJzdHVkeSAzIikKYGBgCgo8cCBzdHlsZT0idGV4dC1hbGlnbjpyaWdodCI+PGEgaHJlZj0iI2hlYWRlciI+YmFjayB0byBUT0M8L2E+PC9wPgoKIyMgRXhwbG9yYXRvcnkgZmFjdG9yIGFuYWx5c2lzCgojIyMgU3RlcCAxOiBSdW4gbWF4aW1hbCBFRkEgKHdpdGhvdXQgYW5kIHdpdGggcm90YXRpb24pCgpgYGB7ciBzMyBhbGwgbm8gcm90YXRpb259CiMgZXhhbWluZSBzY3JlZSBwbG90CiMgZmEucGFyYWxsZWwoZDNfYWxsKQoKIyBydW4gRUZBIHdpdGhvdXQgcm90YXRpb24gd2l0aCBOIGZhY3RvcnMKZWZhX2QzX2FsbF91bnJvdGF0ZWQgPC0gZmEoZDNfYWxsLCAxMywgcm90YXRlID0gIm5vbmUiLAogICAgICAgICAgICAgICAgICAgICAgICAgICBjb3IgPSBjaG9zZW5Db3JUeXBlLCBmbSA9ICJtaW5yZXMiKQpwcmludChlZmFfZDNfYWxsX3Vucm90YXRlZCkKYGBgCgpgYGB7ciBzMyBob3cgbWFueSBmYWN0b3JzLCBpbmNsdWRlID0gRn0KIyBleGFtaW5lIGVpZ2VudmFsdWVzIGFuZCB2YXJpYW5jZSBleHBsYWluZWQKZWZhX2QzX2FsbF91bnJvdGF0ZWRfZWlnZW52YWx1ZXMgPC0gcHJpbnQoZWZhX2QzX2FsbF91bnJvdGF0ZWQpJFZhY2NvdW50ZWQgJT4lCiAgdCgpICU+JQogIGRhdGEuZnJhbWUoKQoKIyBjb3VudCBmYWN0b3JzIHdpdGggZWlnZW52YWx1ZXMgPiAxIGFuZCB2YXJpYW5jZSBleHBsYWluZWQgPiA1JQplZmFfZDNfYWxsX3Vucm90YXRlZF9uZmFjdG9ycyA8LSBlZmFfZDNfYWxsX3Vucm90YXRlZF9laWdlbnZhbHVlcyAlPiUKICBmaWx0ZXIoU1MubG9hZGluZ3MgPiAxLCBQcm9wb3J0aW9uLkV4cGxhaW5lZCA+IDAuMDUpICU+JQogIGNvdW50KCkgJT4lCiAgYXMubnVtZXJpYygpCmVmYV9kM19hbGxfdW5yb3RhdGVkX25mYWN0b3JzCmBgYAoKYGBge3IgczMgYWxsIHJvdGF0aW9ufQplZmFfZDNfYWxsX3JvdGF0ZWRfbWF4IDwtIGZhKGQzX2FsbCwgMTMsIHJvdGF0ZSA9IGNob3NlblJvdFR5cGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvciA9IGNob3NlbkNvclR5cGUsIGZtID0gIm1pbnJlcyIpCgplZmFfZDNfYWxsX3JvdGF0ZWQgPC0gZmEoZDNfYWxsLCBlZmFfZDNfYWxsX3Vucm90YXRlZF9uZmFjdG9ycywgcm90YXRlID0gY2hvc2VuUm90VHlwZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgY29yID0gY2hvc2VuQ29yVHlwZSwgZm0gPSAibWlucmVzIikKCiMgY2hlY2sgdGhhdCBlYWNoIG9mIHRoZXNlIGZhY3RvcnMgaXMgdGhlIGRvbWluYW50IGZhY3RvciBmb3IgYXQgbGVhc3Qgb25lIG1lbnRhbCBjYXBhY2l0eSBpdGVtCmVmYV9kM19hbGxfcm90YXRlZF9sb2FkaW5ncyA8LSBmYS5zb3J0KGxvYWRpbmdzKGVmYV9kM19hbGxfcm90YXRlZClbXSkgJT4lCiAgZGF0YS5mcmFtZSgpICU+JQogIHJvd25hbWVzX3RvX2NvbHVtbigiY2FwYWNpdHkiKSAlPiUKICBnYXRoZXIoZmFjdG9yLCBsb2FkaW5nLCAtY2FwYWNpdHkpICU+JQogIG11dGF0ZShsb2FkaW5nX2FicyA9IGFicyhsb2FkaW5nKSkgJT4lCiAgZ3JvdXBfYnkoY2FwYWNpdHkpICU+JQogIHRvcF9uKDEsIGxvYWRpbmdfYWJzKSAlPiUKICB1bmdyb3VwKCkKZWZhX2QzX2FsbF9yb3RhdGVkX2xvYWRpbmdzCgojIGRyb3AgYW55IGZhY3RvcnMgd2hlcmUgbiA8IDEKZWZhX2QzX2FsbF9yb3RhdGVkX2xvYWRpbmdzICU+JSAKICBjb3VudChmYWN0b3IpICU+JSAKICBmaWx0ZXIobiA+IDApCgojIHNldCBudW1iZXIgb2YgZmFjdG9ycyB0byBleHRyYWN0Cm5mYWN0b3JzX2QzX2FsbCA8LSBlZmFfZDNfYWxsX3JvdGF0ZWRfbG9hZGluZ3MgJT4lIAogIGNvdW50KGZhY3RvcikgJT4lIAogIGZpbHRlcihuID4gMCkgJT4lCiAgbnJvdygpCm5mYWN0b3JzX2QzX2FsbApgYGAKCiMjIyBTdGVwIDI6IFJ1biBFRkEgd2l0aCB2YXJpbWF4IHJvdGF0aW9uCgpgYGB7ciBzMyBhbGwgdmFyaW1heCByb3RhdGlvbn0KIyBydW4gRUZBIHdpdGggcm90YXRpb24gd2l0aCBOIGZhY3RvcnMKZWZhX2QzX2FsbF9yb3RhdGVkTiA8LSBmYShkM19hbGwsIG5mYWN0b3JzX2QzX2FsbCwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgcm90YXRlID0gY2hvc2VuUm90VHlwZSwgY29yID0gY2hvc2VuQ29yVHlwZSwgZm0gPSAibWlucmVzIikKcHJpbnQoZWZhX2QzX2FsbF9yb3RhdGVkTikKCiMgZ2V0IGxvYWRpbmdzIGZvciBlYWNoIGZhY3RvcgplZmFfZDNfYWxsX3JvdGF0ZWROX2xvYWRpbmdzIDwtIGxvYWRpbmdzKGVmYV9kM19hbGxfcm90YXRlZE4pW10gJT4lCiAgZGF0YS5mcmFtZSgpICU+JSAKICByb3duYW1lc190b19jb2x1bW4odmFyID0gIm1jIikKYGBgCgo8cCBzdHlsZT0idGV4dC1hbGlnbjpyaWdodCI+PGEgaHJlZj0iI2hlYWRlciI+YmFjayB0byBUT0M8L2E+PC9wPgoKIyMjIyBGYWN0b3IgbG9hZGluZ3MgdGFibGUKCmBgYHtyIHMzIGxvYWRpbmdzIHRhYmxlfQpkYXRhLmZyYW1lKGxvYWRpbmdzKGZhLnNvcnQoZWZhX2QzX2FsbF9yb3RhdGVkTikpW10pICU+JQogIHJvd25hbWVzX3RvX2NvbHVtbigiY2FwYWNpdHkiKSAlPiUKICBtdXRhdGVfYXQodmFycyhzdGFydHNfd2l0aCgiTSIpKSwgZnVucyhyb3VuZDIpKQpgYGAKCiMgU3R1ZHkgNAoKRGVzaWduOiAyMSBjb25kaXRpb25zLCBiZXR3ZWVuLXN1YmplY3RzCkRhdGUgY29uZHVjdGVkOiAyMDE2LTAxLTE0CgojIyBEZW1vZ3JhcGhpY3MKCmBgYHtyIHM0IGRlbW9ncmFwaGljc30KIyBleGFtaW5lIGV4Y2x1c2lvbgpleGNsdWRlZENvdW50cygic3R1ZHkgNCIpCgojIG1ha2UgZGVtb2dyYXBoaWNzIHRhYmxlcwpkZW1vU2FtcGxlU2l6ZSgic3R1ZHkgNCIpCmRlbW9EdXJhdGlvbigic3R1ZHkgNCIpCmRlbW9BZ2UoInN0dWR5IDQiKQpkZW1vR2VuZGVyKCJzdHVkeSA0IikKZGVtb1JhY2UoInN0dWR5IDQiKQpkZW1vRWR1Y2F0aW9uKCJzdHVkeSA0IikKYGBgCgo8cCBzdHlsZT0idGV4dC1hbGlnbjpyaWdodCI+PGEgaHJlZj0iI2hlYWRlciI+YmFjayB0byBUT0M8L2E+PC9wPgoKIyMgRXhwbG9yYXRvcnkgZmFjdG9yIGFuYWx5c2lzCgojIyMgU3RlcCAxOiBSdW4gbWF4aW1hbCBFRkEgKHdpdGhvdXQgYW5kIHdpdGggcm90YXRpb24pCgpgYGB7ciBzNCBhbGwgbm8gcm90YXRpb259CiMgZXhhbWluZSBzY3JlZSBwbG90CiMgZmEucGFyYWxsZWwoZDRfYWxsKQoKIyBydW4gRUZBIHdpdGhvdXQgcm90YXRpb24gd2l0aCBOIGZhY3RvcnMKZWZhX2Q0X2FsbF91bnJvdGF0ZWQgPC0gZmEoZDRfYWxsLCAxMywgcm90YXRlID0gIm5vbmUiLAogICAgICAgICAgICAgICAgICAgICAgICAgICBjb3IgPSBjaG9zZW5Db3JUeXBlLCBmbSA9ICJtaW5yZXMiKQpwcmludChlZmFfZDRfYWxsX3Vucm90YXRlZCkKYGBgCgpgYGB7ciBzNCBob3cgbWFueSBmYWN0b3JzLCBpbmNsdWRlID0gRn0KIyBleGFtaW5lIGVpZ2VudmFsdWVzIGFuZCB2YXJpYW5jZSBleHBsYWluZWQKZWZhX2Q0X2FsbF91bnJvdGF0ZWRfZWlnZW52YWx1ZXMgPC0gcHJpbnQoZWZhX2Q0X2FsbF91bnJvdGF0ZWQpJFZhY2NvdW50ZWQgJT4lCiAgdCgpICU+JQogIGRhdGEuZnJhbWUoKQoKIyBjb3VudCBmYWN0b3JzIHdpdGggZWlnZW52YWx1ZXMgPiAxIGFuZCB2YXJpYW5jZSBleHBsYWluZWQgPiA1JQplZmFfZDRfYWxsX3Vucm90YXRlZF9uZmFjdG9ycyA8LSBlZmFfZDRfYWxsX3Vucm90YXRlZF9laWdlbnZhbHVlcyAlPiUKICBmaWx0ZXIoU1MubG9hZGluZ3MgPiAxLCBQcm9wb3J0aW9uLkV4cGxhaW5lZCA+IDAuMDUpICU+JQogIGNvdW50KCkgJT4lCiAgYXMubnVtZXJpYygpCmVmYV9kNF9hbGxfdW5yb3RhdGVkX25mYWN0b3JzCmBgYAoKYGBge3IgczQgYWxsIHJvdGF0aW9ufQplZmFfZDRfYWxsX3JvdGF0ZWRfbWF4IDwtIGZhKGQ0X2FsbCwgMTMsIHJvdGF0ZSA9IGNob3NlblJvdFR5cGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvciA9IGNob3NlbkNvclR5cGUsIGZtID0gIm1pbnJlcyIpCgplZmFfZDRfYWxsX3JvdGF0ZWQgPC0gZmEoZDRfYWxsLCBlZmFfZDRfYWxsX3Vucm90YXRlZF9uZmFjdG9ycywgcm90YXRlID0gY2hvc2VuUm90VHlwZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgY29yID0gY2hvc2VuQ29yVHlwZSwgZm0gPSAibWlucmVzIikKCiMgY2hlY2sgdGhhdCBlYWNoIG9mIHRoZXNlIGZhY3RvcnMgaXMgdGhlIGRvbWluYW50IGZhY3RvciBmb3IgYXQgbGVhc3Qgb25lIG1lbnRhbCBjYXBhY2l0eSBpdGVtCmVmYV9kNF9hbGxfcm90YXRlZF9sb2FkaW5ncyA8LSBmYS5zb3J0KGxvYWRpbmdzKGVmYV9kNF9hbGxfcm90YXRlZClbXSkgJT4lCiAgZGF0YS5mcmFtZSgpICU+JQogIHJvd25hbWVzX3RvX2NvbHVtbigiY2FwYWNpdHkiKSAlPiUKICBnYXRoZXIoZmFjdG9yLCBsb2FkaW5nLCAtY2FwYWNpdHkpICU+JQogIG11dGF0ZShsb2FkaW5nX2FicyA9IGFicyhsb2FkaW5nKSkgJT4lCiAgZ3JvdXBfYnkoY2FwYWNpdHkpICU+JQogIHRvcF9uKDEsIGxvYWRpbmdfYWJzKSAlPiUKICB1bmdyb3VwKCkKZWZhX2Q0X2FsbF9yb3RhdGVkX2xvYWRpbmdzCgojIGRyb3AgYW55IGZhY3RvcnMgd2hlcmUgbiA8IDEKZWZhX2Q0X2FsbF9yb3RhdGVkX2xvYWRpbmdzICU+JSAKICBjb3VudChmYWN0b3IpICU+JSAKICBmaWx0ZXIobiA+IDApCgojIHNldCBudW1iZXIgb2YgZmFjdG9ycyB0byBleHRyYWN0Cm5mYWN0b3JzX2Q0X2FsbCA8LSBlZmFfZDRfYWxsX3JvdGF0ZWRfbG9hZGluZ3MgJT4lIAogIGNvdW50KGZhY3RvcikgJT4lIAogIGZpbHRlcihuID4gMCkgJT4lCiAgbnJvdygpCm5mYWN0b3JzX2Q0X2FsbApgYGAKCiMjIyBTdGVwIDI6IFJ1biBFRkEgd2l0aCB2YXJpbWF4IHJvdGF0aW9uCgpgYGB7ciBzNCBhbGwgdmFyaW1heCByb3RhdGlvbn0KIyBydW4gRUZBIHdpdGggcm90YXRpb24gd2l0aCBOIGZhY3RvcnMKZWZhX2Q0X2FsbF9yb3RhdGVkTiA8LSBmYShkNF9hbGwsIG5mYWN0b3JzX2Q0X2FsbCwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgcm90YXRlID0gY2hvc2VuUm90VHlwZSwgY29yID0gY2hvc2VuQ29yVHlwZSwgZm0gPSAibWlucmVzIikKcHJpbnQoZWZhX2Q0X2FsbF9yb3RhdGVkTikKCiMgZ2V0IGxvYWRpbmdzIGZvciBlYWNoIGZhY3RvcgplZmFfZDRfYWxsX3JvdGF0ZWROX2xvYWRpbmdzIDwtIGxvYWRpbmdzKGVmYV9kNF9hbGxfcm90YXRlZE4pW10gJT4lCiAgZGF0YS5mcmFtZSgpICU+JSAKICByb3duYW1lc190b19jb2x1bW4odmFyID0gIm1jIikKYGBgCgo8cCBzdHlsZT0idGV4dC1hbGlnbjpyaWdodCI+PGEgaHJlZj0iI2hlYWRlciI+YmFjayB0byBUT0M8L2E+PC9wPgoKIyMjIyBGYWN0b3IgbG9hZGluZ3MgdGFibGUKCmBgYHtyIHM0IGxvYWRpbmdzIHRhYmxlfQpkYXRhLmZyYW1lKGxvYWRpbmdzKGZhLnNvcnQoZWZhX2Q0X2FsbF9yb3RhdGVkTikpW10pICU+JQogIHJvd25hbWVzX3RvX2NvbHVtbigiY2FwYWNpdHkiKSAlPiUKICBtdXRhdGVfYXQodmFycyhzdGFydHNfd2l0aCgiTSIpKSwgZnVucyhyb3VuZDIpKQpgYGAKCiMgQmlnIGZhY3RvciBsb2FkaW5ncyB0YWJsZSBmb3IgYWxsIHN0dWRpZXMgKFN0dWRpZXMgMS00KQoKYGBge3IgYWxsIHN0dWRpZXMgbG9hZGluZ3MgdGFibGV9Cm9yZGVyX3MxIDwtIGxvYWRpbmdzKGZhLnNvcnQoZWZhX2QxX2FsbF9yb3RhdGVkTikpW10gJT4lCiAgZGF0YS5mcmFtZSgpICU+JQogIHJvd25hbWVzX3RvX2NvbHVtbih2YXIgPSAibWMiKSAlPiUKICByb3duYW1lc190b19jb2x1bW4odmFyID0gIm9yZGVyMSIpICU+JQogIHJlbmFtZShzMV9NUjIgPSBNUjIsIHMxX01SMSA9IE1SMSwgczFfTVIzID0gTVIzKQoKb3JkZXJfczIgPC0gbG9hZGluZ3MoZmEuc29ydChlZmFfZDJfYWxsX3JvdGF0ZWROKSlbXSAlPiUKICBkYXRhLmZyYW1lKCkgJT4lCiAgcm93bmFtZXNfdG9fY29sdW1uKHZhciA9ICJtYyIpICU+JQogIHJlbmFtZShzMl9NUjIgPSBNUjIsIHMyX01SMSA9IE1SMSwgczJfTVIzID0gTVIzKQoKb3JkZXJfczMgPC0gbG9hZGluZ3MoZmEuc29ydChlZmFfZDNfYWxsX3JvdGF0ZWROKSlbXSAlPiUKICBkYXRhLmZyYW1lKCkgJT4lCiAgcm93bmFtZXNfdG9fY29sdW1uKHZhciA9ICJtYyIpICU+JQogIHJlbmFtZShzM19NUjIgPSBNUjIsIHMzX01SMSA9IE1SMSwgczNfTVIzID0gTVIzKQoKb3JkZXJfczQgPC0gbG9hZGluZ3MoZmEuc29ydChlZmFfZDRfYWxsX3JvdGF0ZWROKSlbXSAlPiUKICBkYXRhLmZyYW1lKCkgJT4lCiAgcm93bmFtZXNfdG9fY29sdW1uKHZhciA9ICJtYyIpICU+JQogIHJlbmFtZShzNF9NUjIgPSBNUjIsIHM0X01SMSA9IE1SMSwgczRfTVIzID0gTVIzKQoKYmlnVGFibGUgPC0gb3JkZXJfczEgJT4lCiAgZnVsbF9qb2luKG9yZGVyX3MyKSAlPiUKICBmdWxsX2pvaW4ob3JkZXJfczMpICU+JQogIGZ1bGxfam9pbihvcmRlcl9zNCkgJT4lCiAgbXV0YXRlX2F0KHZhcnMoc3RhcnRzX3dpdGgoInMiKSksIGZ1bnMocm91bmQyKSkgJT4lCiAgc2VsZWN0KG9yZGVyMSwgbWMsIGVuZHNfd2l0aCgiTVIxIiksIGVuZHNfd2l0aCgiTVIyIiksIGVuZHNfd2l0aCgiTVIzIikpCgpiaWdUYWJsZQpgYGAKCiMgRmlndXJlcwoKYGBge3IgcGxvdHRpbmcgc2V0dXAgY2hhcmFjdGVyIG1lYW5zLCBpbmNsdWRlID0gRn0KIyBib290c3RyYXAgOTUlIENJcyBmb3IgcmF0aW5ncyBieSBjaGFyYWN0ZXIgKG5vbnBhcmFtZXRyaWMpCiMgc3R1ZHkgMQpjaGFyX3Bsb3R0aW5nX3JhdGluZ3NfczEgPC0gZDEgJT4lIAogIHNlbGVjdChjb25kaXRpb24sIHN1YmlkLCBoYXBweTpwcmlkZSkgJT4lCiAgZ2F0aGVyKG1jLCByZXNwb25zZSwgLXN1YmlkLCAtY29uZGl0aW9uKSAlPiUKICBtdXRhdGUocmVzcG9uc2UgPSBhcy5udW1lcmljKHJlc3BvbnNlKSkgJT4lCiAgZ3JvdXBfYnkoY29uZGl0aW9uLCBtYykgJT4lCiAgZG8oZGF0YS5mcmFtZShyYmluZChzbWVhbi5jbC5ib290KC4kcmVzcG9uc2UpKSkpICU+JQogIGZ1bGxfam9pbihkZW1vU2FtcGxlU2l6ZSgic3R1ZHkgMSIpICU+JSBmaWx0ZXIoY29uZGl0aW9uICE9ICJhbGwiKSkgJT4lCiAgbXV0YXRlKHN0dWR5ID0gInN0dWR5IDEiKQoKIyBzdHVkeSAyCmNoYXJfcGxvdHRpbmdfcmF0aW5nc19zMiA8LSBkMiAlPiUgCiAgc2VsZWN0KGNvbmRpdGlvbiwgc3ViaWQsIGhhcHB5OnByaWRlKSAlPiUKICBnYXRoZXIobWMsIHJlc3BvbnNlLCAtc3ViaWQsIC1jb25kaXRpb24pICU+JQogIG11dGF0ZShyZXNwb25zZSA9IGFzLm51bWVyaWMocmVzcG9uc2UpKSAlPiUKICBncm91cF9ieShjb25kaXRpb24sIG1jKSAlPiUKICBkbyhkYXRhLmZyYW1lKHJiaW5kKHNtZWFuLmNsLmJvb3QoLiRyZXNwb25zZSkpKSkgJT4lCiAgZnVsbF9qb2luKGRlbW9TYW1wbGVTaXplKCJzdHVkeSAyIikgJT4lIGZpbHRlcihjb25kaXRpb24gIT0gImFsbCIpKSAlPiUKICBtdXRhdGUoc3R1ZHkgPSAic3R1ZHkgMiIpCgoKIyBzdHVkeSAzCmNoYXJfcGxvdHRpbmdfcmF0aW5nc19zMyA8LSBkMyAlPiUgCiAgc2VsZWN0KHRhcmdldCwgc3ViaWQsIGhhcHB5OnByaWRlKSAlPiUKICByZW5hbWUoY29uZGl0aW9uID0gdGFyZ2V0KSAlPiUKICBnYXRoZXIobWMsIHJlc3BvbnNlLCAtc3ViaWQsIC1jb25kaXRpb24pICU+JQogIG11dGF0ZShyZXNwb25zZSA9IGFzLm51bWVyaWMocmVzcG9uc2UpKSAlPiUKICBncm91cF9ieShjb25kaXRpb24sIG1jKSAlPiUKICBkbyhkYXRhLmZyYW1lKHJiaW5kKHNtZWFuLmNsLmJvb3QoLiRyZXNwb25zZSkpKSkgJT4lCiAgZnVsbF9qb2luKGRlbW9TYW1wbGVTaXplKCJzdHVkeSAzIikgJT4lIGZpbHRlcihjb25kaXRpb24gIT0gImFsbCIpKSAlPiUKICBtdXRhdGUoc3R1ZHkgPSAic3R1ZHkgMyIpCgojIHN0dWR5IDQKY2hhcl9wbG90dGluZ19yYXRpbmdzX3M0IDwtIGQ0ICU+JSAKICBzZWxlY3QoY29uZGl0aW9uLCBzdWJpZCwgaGFwcHk6cHJpZGUpICU+JQogIGdhdGhlcihtYywgcmVzcG9uc2UsIC1zdWJpZCwgLWNvbmRpdGlvbikgJT4lCiAgbXV0YXRlKHJlc3BvbnNlID0gYXMubnVtZXJpYyhyZXNwb25zZSkpICU+JQogIGdyb3VwX2J5KGNvbmRpdGlvbiwgbWMpICU+JQogIGRvKGRhdGEuZnJhbWUocmJpbmQoc21lYW4uY2wuYm9vdCguJHJlc3BvbnNlKSkpKSAlPiUKICBmdWxsX2pvaW4oZGVtb1NhbXBsZVNpemUoInN0dWR5IDQiKSAlPiUgZmlsdGVyKGNvbmRpdGlvbiAhPSAiYWxsIikpICU+JQogIG11dGF0ZShzdHVkeSA9ICJzdHVkeSA0IikKYGBgCgpgYGB7ciBwbG90dGluZyBzZXR1cCBjaGFyYWN0ZXIgbWVhbnMgbWVyZ2UsIGluY2x1ZGUgPSBGfQpjaGFyX3Bsb3R0aW5nX3JhdGluZ3NfYWxsIDwtIGNoYXJfcGxvdHRpbmdfcmF0aW5nc19zMSAlPiUKICBmdWxsX2pvaW4oY2hhcl9wbG90dGluZ19yYXRpbmdzX3MyKSAlPiUKICBmdWxsX2pvaW4oY2hhcl9wbG90dGluZ19yYXRpbmdzX3MzKSAlPiUKICBmdWxsX2pvaW4oY2hhcl9wbG90dGluZ19yYXRpbmdzX3M0KSAlPiUKICB1bmdyb3VwKCkgJT4lCiAgbXV0YXRlKHN0dWR5ID0gZmFjdG9yKHN0dWR5KSwKICAgICAgICAgY29uZGl0aW9uID0gZmFjdG9yKGNvbmRpdGlvbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldmVscyA9IGMoInN0YXBsZXIiLCAiY2FyIiwgImNvbXB1dGVyIiwgInJvYm90IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm1pY3JvYmUiLCAiYmVldGxlIiwgImZpc2giLCAiYmx1ZWpheSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJmcm9nIiwgIm1vdXNlIiwgImdvYXQiLCAiZG9nIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImJlYXIiLCAiZG9scGhpbiIsICJlbGVwaGFudCIsICJjaGltcCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJmZXR1cyIsICJwdnMiLCAiaW5mYW50IiwgImNoaWxkIiwgImFkdWx0IikpKQpgYGAKCmBgYHtyIHBsb3R0aW5nIHNldHVwIGNhcGFjaXR5IHdvcmRpbmdzLCBpbmNsdWRlID0gRn0KY2hhcl9wbG90dGluZ193b3JkaW5ncyA8LSBjaGFyX3Bsb3R0aW5nX3JhdGluZ3NfYWxsICU+JQogIHVuZ3JvdXAoKSAlPiUKICBzZWxlY3QobWMpICU+JQogIGRpc3RpbmN0KCkgJT4lIAogIG11dGF0ZSh3b3JkaW5nID0gZmFjdG9yKAogICAgcmVjb2RlKG1jLAogICAgICAgICAgIGh1bmdyeSA9ICJnZXR0aW5nIGh1bmdyeSIsIHBhaW4gPSAiZXhwZXJpZW5jaW5nIHBhaW4iLAogICAgICAgICAgIHRpcmVkID0gImZlZWxpbmcgdGlyZWQiLCBmZWFyID0gImV4cGVyaWVuY2luZyBmZWFyIiwKICAgICAgICAgICBjb21wdXRhdGlvbnMgPSAiZG9pbmcgY29tcHV0YXRpb25zIiwgcGxlYXN1cmUgPSAiZXhwZXJpZW5jaW5nIHBsZWFzdXJlIiwKICAgICAgICAgICBjb25zY2lvdXMgPSAiYmVpbmcgY29uc2Npb3VzIiwgZnJlZV93aWxsID0gImhhdmluZyBmcmVlIHdpbGwiLAogICAgICAgICAgIHNhZmUgPSAiZmVlbGluZyBzYWZlIiwgZGVzaXJlcyA9ICJoYXZpbmcgZGVzaXJlcyIsCiAgICAgICAgICAgY2FsbSA9ICJmZWVsaW5nIGNhbG0iLCBuYXVzZWF0ZWQgPSAiZmVlbGluZyBuYXVzZWF0ZWQiLAogICAgICAgICAgIGFuZ3J5ID0gImdldHRpbmcgYW5ncnkiLCBpbnRlbnRpb25zID0gImhhdmluZyBpbnRlbnRpb25zIiwKICAgICAgICAgICBzZWxmX2F3YXJlID0gImJlaW5nIHNlbGYtYXdhcmUiLCBvZG9ycyA9ICJkZXRlY3Rpbmcgb2RvcnMiLAogICAgICAgICAgIGVtYmFycmFzc2VkID0gImZlZWxpbmcgZW1iYXJyYXNzZWQiLCBwcmlkZSA9ICJleHBlcmllbmNpbmcgcHJpZGUiLAogICAgICAgICAgIGxvdmUgPSAiZmVlbGluZyBsb3ZlIiwgZ3VpbHQgPSAiZXhwZXJpZW5jaW5nIGd1aWx0IiwKICAgICAgICAgICBkZXByZXNzZWQgPSAiZmVlbGluZyBkZXByZXNzZWQiLCBkaXNyZXNwZWN0ZWQgPSAiZmVlbGluZyBkaXNyZXNwZWN0ZWQiLAogICAgICAgICAgIGJlbGllZnMgPSAiaG9sZGluZyBiZWxpZWZzIiwgZW1vX3JlY29nID0gInVuZGVyc3RhbmRpbmcgLi4uIGZlZWxpbmciLAogICAgICAgICAgIGpveSA9ICJleHBlcmllbmNpbmcgam95IiwgcGVyc29uYWxpdHkgPSAiaGF2aW5nIGEgcGVyc29uYWxpdHkiLAogICAgICAgICAgIGhhcHB5ID0gImZlZWxpbmcgaGFwcHkiLCBtb3JhbGl0eSA9ICJ0ZWxsaW5nIHJpZ2h0IGZyb20gd3JvbmciLAogICAgICAgICAgIHRob3VnaHRzID0gImhhdmluZyB0aG91Z2h0cyIsIHNlbGZfcmVzdHJhaW50ID0gImV4ZXJjaXNpbmcgc2VsZi1yZXN0cmFpbnQiLAogICAgICAgICAgIHJlbWVtYmVyaW5nID0gInJlbWVtYmVyaW5nIHRoaW5ncyIsIHJlY29nbml6aW5nID0gInJlY29nbml6aW5nIG90aGVycyIsCiAgICAgICAgICAgdGVtcGVyYXR1cmUgPSAic2Vuc2luZyB0ZW1wZXJhdHVyZXMiLCBjb21tdW5pY2F0aW5nID0gImNvbW11bmljYXRpbmcgLi4uIiwKICAgICAgICAgICBnb2FsID0gIndvcmtpbmcgdG93YXJkIGEgZ29hbCIsIGRlcHRoID0gInBlcmNlaXZpbmcgZGVwdGgiLAogICAgICAgICAgIHNvdW5kcyA9ICJkZXRlY3Rpbmcgc291bmRzIiwgc2VlaW5nID0gInNlZWluZyB0aGluZ3MiLAogICAgICAgICAgIGNob2ljZXMgPSAibWFraW5nIGNob2ljZXMiLCByZWFzb25pbmcgPSAicmVhc29uaW5nIGFib3V0IHRoaW5ncyIpKSkKYGBgCgoKYGBge3IgcGxvdHRpbmcgc2V0dXAgbG9hZGluZ3MsIGluY2x1ZGUgPSBGfQojIG1lcmdlIHdpdGggbG9hZGluZ3MsIG9yZGVyaW5ncywgYW5kIGRvbWluYW50IGZhY3RvcnMgZnJvbSBlYWNoIHN0dWR5IApjaGFyX3Bsb3R0aW5nIDwtIGNoYXJfcGxvdHRpbmdfcmF0aW5nc19hbGwgJT4lCiAgZnVsbF9qb2luKGNoYXJfcGxvdHRpbmdfd29yZGluZ3MpICU+JQogIGZ1bGxfam9pbihvcmRlcl9zMSAlPiUKICAgICAgICAgICAgICBtdXRhdGUoczFfTVIxX2FicyA9IGFicyhzMV9NUjEpLAogICAgICAgICAgICAgICAgICAgICBzMV9NUjJfYWJzID0gYWJzKHMxX01SMiksCiAgICAgICAgICAgICAgICAgICAgIHMxX01SM19hYnMgPSBhYnMoczFfTVIzKSwKICAgICAgICAgICAgICAgICAgICAgczFfZmFjdG9yID0gCiAgICAgICAgICAgICAgICAgICAgICAgaWZlbHNlKHMxX01SMV9hYnMgPiBzMV9NUjJfYWJzICYKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzMV9NUjFfYWJzID4gczFfTVIzX2FicywgIkJPRFkiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZmVsc2UoczFfTVIyX2FicyA+IHMxX01SMV9hYnMgJgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzMV9NUjJfYWJzID4gczFfTVIzX2FicywgIkhFQVJUIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmZWxzZShzMV9NUjNfYWJzID4gczFfTVIxX2FicyAmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzMV9NUjNfYWJzID4gczFfTVIyX2FicywgIk1JTkQiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5BKSkpLAogICAgICAgICAgICAgICAgICAgICBzMV9jb2xvciA9IHJlY29kZShzMV9mYWN0b3IsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJCT0RZIiA9ICIjMzc3RUI4IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkhFQVJUIiA9ICIjNERBRjRBIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIk1JTkQiID0gIiNFNDFBMUMiKSwKICAgICAgICAgICAgICAgICAgICAgczFfb3JkZXIgPSBhcy5udW1lcmljKG9yZGVyMSkpICU+JQogICAgICAgICAgICAgIHNlbGVjdCgtczFfTVIxX2FicywgLXMxX01SMl9hYnMsIC1zMV9NUjNfYWJzKSkgJT4lCiAgZnVsbF9qb2luKG9yZGVyX3MyICU+JQogICAgICAgICAgICAgIGRhdGEuZnJhbWUoKSAlPiUKICAgICAgICAgICAgICBtdXRhdGUoczJfTVIxX2FicyA9IGFicyhzMl9NUjEpLAogICAgICAgICAgICAgICAgICAgICBzMl9NUjJfYWJzID0gYWJzKHMyX01SMiksCiAgICAgICAgICAgICAgICAgICAgIHMyX01SM19hYnMgPSBhYnMoczJfTVIzKSwKICAgICAgICAgICAgICAgICAgICAgczJfZmFjdG9yID0gCiAgICAgICAgICAgICAgICAgICAgICAgaWZlbHNlKHMyX01SMV9hYnMgPiBzMl9NUjJfYWJzICYKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzMl9NUjFfYWJzID4gczJfTVIzX2FicywgIkJPRFkiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZmVsc2UoczJfTVIyX2FicyA+IHMyX01SMV9hYnMgJgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzMl9NUjJfYWJzID4gczJfTVIzX2FicywgIkhFQVJUIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmZWxzZShzMl9NUjNfYWJzID4gczJfTVIxX2FicyAmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzMl9NUjNfYWJzID4gczJfTVIyX2FicywgIk1JTkQiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5BKSkpLAogICAgICAgICAgICAgICAgICAgICBzMl9jb2xvciA9IHJlY29kZShzMl9mYWN0b3IsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJCT0RZIiA9ICIjMzc3RUI4IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkhFQVJUIiA9ICIjNERBRjRBIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIk1JTkQiID0gIiNFNDFBMUMiKSkgJT4lCiAgICAgICAgICAgICAgcm93bmFtZXNfdG9fY29sdW1uKHZhciA9ICJzMl9vcmRlciIpICU+JQogICAgICAgICAgICAgIG11dGF0ZShzMl9vcmRlciA9IGFzLm51bWVyaWMoczJfb3JkZXIpKSAlPiUKICAgICAgICAgICAgICBzZWxlY3QoLXMyX01SMV9hYnMsIC1zMl9NUjJfYWJzLCAtczJfTVIzX2FicykpICU+JQogIGZ1bGxfam9pbihvcmRlcl9zMyAlPiUKICAgICAgICAgICAgICBtdXRhdGUoczNfTVIxX2FicyA9IGFicyhzM19NUjEpLAogICAgICAgICAgICAgICAgICAgICBzM19NUjJfYWJzID0gYWJzKHMzX01SMiksCiAgICAgICAgICAgICAgICAgICAgIHMzX01SM19hYnMgPSBhYnMoczNfTVIzKSwKICAgICAgICAgICAgICAgICAgICAgczNfZmFjdG9yID0gCiAgICAgICAgICAgICAgICAgICAgICAgaWZlbHNlKHMzX01SMV9hYnMgPiBzM19NUjJfYWJzICYKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzM19NUjFfYWJzID4gczNfTVIzX2FicywgIkJPRFkiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZmVsc2UoczNfTVIyX2FicyA+IHMzX01SMV9hYnMgJgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzM19NUjJfYWJzID4gczNfTVIzX2FicywgIkhFQVJUIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmZWxzZShzM19NUjNfYWJzID4gczNfTVIxX2FicyAmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzM19NUjNfYWJzID4gczNfTVIyX2FicywgIk1JTkQiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5BKSkpLAogICAgICAgICAgICAgICAgICAgICBzM19jb2xvciA9IHJlY29kZShzM19mYWN0b3IsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJCT0RZIiA9ICIjMzc3RUI4IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkhFQVJUIiA9ICIjNERBRjRBIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIk1JTkQiID0gIiNFNDFBMUMiKSkgJT4lCiAgICAgICAgICAgICAgcm93bmFtZXNfdG9fY29sdW1uKHZhciA9ICJzM19vcmRlciIpICU+JQogICAgICAgICAgICAgIG11dGF0ZShzM19vcmRlciA9IGFzLm51bWVyaWMoczNfb3JkZXIpKSAlPiUKICAgICAgICAgICAgICBzZWxlY3QoLXMzX01SMV9hYnMsIC1zM19NUjJfYWJzLCAtczNfTVIzX2FicykpICU+JQogIGZ1bGxfam9pbihvcmRlcl9zNCAlPiUKICAgICAgICAgICAgICBtdXRhdGUoczRfTVIxX2FicyA9IGFicyhzNF9NUjEpLAogICAgICAgICAgICAgICAgICAgICBzNF9NUjJfYWJzID0gYWJzKHM0X01SMiksCiAgICAgICAgICAgICAgICAgICAgIHM0X01SM19hYnMgPSBhYnMoczRfTVIzKSwKICAgICAgICAgICAgICAgICAgICAgczRfZmFjdG9yID0gCiAgICAgICAgICAgICAgICAgICAgICAgaWZlbHNlKHM0X01SMV9hYnMgPiBzNF9NUjJfYWJzICYKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzNF9NUjFfYWJzID4gczRfTVIzX2FicywgIkJPRFkiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZmVsc2UoczRfTVIyX2FicyA+IHM0X01SMV9hYnMgJgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzNF9NUjJfYWJzID4gczRfTVIzX2FicywgIkhFQVJUIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmZWxzZShzNF9NUjNfYWJzID4gczRfTVIxX2FicyAmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzNF9NUjNfYWJzID4gczRfTVIyX2FicywgIk1JTkQiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5BKSkpLAogICAgICAgICAgICAgICAgICAgICBzNF9jb2xvciA9IHJlY29kZShzNF9mYWN0b3IsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJCT0RZIiA9ICIjMzc3RUI4IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkhFQVJUIiA9ICIjNERBRjRBIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIk1JTkQiID0gIiNFNDFBMUMiKSkgJT4lCiAgICAgICAgICAgICAgcm93bmFtZXNfdG9fY29sdW1uKHZhciA9ICJzNF9vcmRlciIpICU+JQogICAgICAgICAgICAgIG11dGF0ZShzNF9vcmRlciA9IGFzLm51bWVyaWMoczRfb3JkZXIpKSAlPiUKICAgICAgICAgICAgICBzZWxlY3QoLXM0X01SMV9hYnMsIC1zNF9NUjJfYWJzLCAtczRfTVIzX2FicykpCgojIGNvbmZpZ3VyZSBwbG90IGxhYmVscwpsYWJlbF9kZl9zMSA8LSBjaGFyX3Bsb3R0aW5nICU+JSBmaWx0ZXIoc3R1ZHkgPT0gInN0dWR5IDEiKSAlPiUgc2VsZWN0KGNvbmRpdGlvbiwgbikgJT4lIHVuaXF1ZSgpCmxhYmVsX2RmX3MyIDwtIGNoYXJfcGxvdHRpbmcgJT4lIGZpbHRlcihzdHVkeSA9PSAic3R1ZHkgMiIpICU+JSBzZWxlY3QoY29uZGl0aW9uLCBuKSAlPiUgdW5pcXVlKCkKbGFiZWxfZGZfczMgPC0gY2hhcl9wbG90dGluZyAlPiUgZmlsdGVyKHN0dWR5ID09ICJzdHVkeSAzIikgJT4lIHNlbGVjdChjb25kaXRpb24sIG4pICU+JSB1bmlxdWUoKQpsYWJlbF9kZl9zNCA8LSBjaGFyX3Bsb3R0aW5nICU+JSBmaWx0ZXIoc3R1ZHkgPT0gInN0dWR5IDQiKSAlPiUgc2VsZWN0KGNvbmRpdGlvbiwgbikgJT4lIHVuaXF1ZSgpCgpmYWNldExhYnNfczEgPC0gZ3N1YigiIFxcKCIsICJcbigiLCBtYWtlRmFjZXRMYWJzKGNoYXJfcGxvdHRpbmcgJT4lIGZpbHRlcihzdHVkeSA9PSAic3R1ZHkgMSIpKSkKZmFjZXRMYWJzX3MyIDwtIGdzdWIoIiBcXCgiLCAiXG4oIiwgbWFrZUZhY2V0TGFicyhjaGFyX3Bsb3R0aW5nICU+JSBmaWx0ZXIoc3R1ZHkgPT0gInN0dWR5IDIiKSkpCmZhY2V0TGFic19zMyA8LSBnc3ViKCIgXFwoIiwgIlxuKCIsIG1ha2VGYWNldExhYnMoY2hhcl9wbG90dGluZyAlPiUgZmlsdGVyKHN0dWR5ID09ICJzdHVkeSAzIikpKQpmYWNldExhYnNfczQgPC0gZ3N1YigiIFxcKCIsICJcbigiLCBtYWtlRmFjZXRMYWJzKGNoYXJfcGxvdHRpbmcgJT4lIGZpbHRlcihzdHVkeSA9PSAic3R1ZHkgNCIpKSkKCiMgY29uZmlndXJlIGN1c3RvbSBwYWxldHRlCm15UGFsZXR0ZSA8LSBicmV3ZXIucGFsKDMsICJTZXQxIik7IG5hbWVzKG15UGFsZXR0ZSkgPC0gYygiQk9EWSIsICJIRUFSVCIsICJNSU5EIikKCnBhbGV0dGVfYmFzZSA8LSBjaGFyX3Bsb3R0aW5nICU+JSAKICBzZWxlY3QobWMsIGVuZHNfd2l0aCgiX2ZhY3RvciIpKSAlPiUKICBkaXN0aW5jdCgpCnBhbGV0dGVfczEgPC0gYyhyZXAobXlQYWxldHRlWyJNSU5EIl0sIHBhbGV0dGVfYmFzZSAlPiUgZmlsdGVyKHMxX2ZhY3RvciA9PSAiTUlORCIpICU+JSBjb3VudCgpKSwKICAgICAgICAgICAgICAgIHJlcChteVBhbGV0dGVbIkhFQVJUIl0sIHBhbGV0dGVfYmFzZSAlPiUgZmlsdGVyKHMxX2ZhY3RvciA9PSAiSEVBUlQiKSAlPiUgY291bnQoKSksCiAgICAgICAgICAgICAgICByZXAobXlQYWxldHRlWyJCT0RZIl0sIHBhbGV0dGVfYmFzZSAlPiUgZmlsdGVyKHMxX2ZhY3RvciA9PSAiQk9EWSIpICU+JSBjb3VudCgpKSkKcGFsZXR0ZV9zMiA8LSBjKHJlcChteVBhbGV0dGVbIk1JTkQiXSwgcGFsZXR0ZV9iYXNlICU+JSBmaWx0ZXIoczJfZmFjdG9yID09ICJNSU5EIikgJT4lIGNvdW50KCkpLAogICAgICAgICAgICAgICAgcmVwKG15UGFsZXR0ZVsiSEVBUlQiXSwgcGFsZXR0ZV9iYXNlICU+JSBmaWx0ZXIoczJfZmFjdG9yID09ICJIRUFSVCIpICU+JSBjb3VudCgpKSwKICAgICAgICAgICAgICAgIHJlcChteVBhbGV0dGVbIkJPRFkiXSwgcGFsZXR0ZV9iYXNlICU+JSBmaWx0ZXIoczJfZmFjdG9yID09ICJCT0RZIikgJT4lIGNvdW50KCkpKQpwYWxldHRlX3MzIDwtIGMocmVwKG15UGFsZXR0ZVsiTUlORCJdLCBwYWxldHRlX2Jhc2UgJT4lIGZpbHRlcihzM19mYWN0b3IgPT0gIk1JTkQiKSAlPiUgY291bnQoKSksCiAgICAgICAgICAgICAgICByZXAobXlQYWxldHRlWyJIRUFSVCJdLCBwYWxldHRlX2Jhc2UgJT4lIGZpbHRlcihzM19mYWN0b3IgPT0gIkhFQVJUIikgJT4lIGNvdW50KCkpLAogICAgICAgICAgICAgICAgcmVwKG15UGFsZXR0ZVsiQk9EWSJdLCBwYWxldHRlX2Jhc2UgJT4lIGZpbHRlcihzM19mYWN0b3IgPT0gIkJPRFkiKSAlPiUgY291bnQoKSkpCnBhbGV0dGVfczQgPC0gYyhyZXAobXlQYWxldHRlWyJNSU5EIl0sIHBhbGV0dGVfYmFzZSAlPiUgZmlsdGVyKHM0X2ZhY3RvciA9PSAiTUlORCIpICU+JSBjb3VudCgpKSwKICAgICAgICAgICAgICAgIHJlcChteVBhbGV0dGVbIkhFQVJUIl0sIHBhbGV0dGVfYmFzZSAlPiUgZmlsdGVyKHM0X2ZhY3RvciA9PSAiSEVBUlQiKSAlPiUgY291bnQoKSksCiAgICAgICAgICAgICAgICByZXAobXlQYWxldHRlWyJCT0RZIl0sIHBhbGV0dGVfYmFzZSAlPiUgZmlsdGVyKHM0X2ZhY3RvciA9PSAiQk9EWSIpICU+JSBjb3VudCgpKSkKYGBgCgojIyBGaWd1cmUgMQoKTWVhbiByYXRpbmdzIG9mIDQwIG1lbnRhbCBjYXBhY2l0aWVzIGZvciBhIHN1YnNldCBvZiB0aGUgMjEgZW50aXRpZXMgaW5jbHVkZWQgaW4gU3R1ZHkgNC4gKFNlZSBGaWcuIFM1IGZvciBtZWFuIHJhdGluZ3MgZm9yIHRoZSBmdWxsIHNldCBvZiBlbnRpdGllcy4pIFBhcnRpY2lwYW50cyByZXNwb25kZWQgb24gYSBzY2FsZSBmcm9tIDAgKE5vdCBhdCBhbGwgY2FwYWJsZSkgdG8gNiAoSGlnaGx5IGNhcGFibGUpLiBFcnJvciBiYXJzIGFyZSBub25wYXJhbWV0cmljIGJvb3RzdHJhcHBlZCA5NSUgY29uZmlkZW5jZSBpbnRlcnZhbHMuIE1lbnRhbCBjYXBhY2l0aWVzIGFyZSBncm91cGVkIGFjY29yZGluZyB0byB0aGVpciBkb21pbmFudCBmYWN0b3IgbG9hZGluZyBpbiBTdHVkeSAxLiAqRG9pbmcgY29tcHV0YXRpb25zKiB3YXMgdGhlIG9ubHkgaXRlbSB0byBsb2FkIG5lZ2F0aXZlbHkgb24gaXRzIGRvbWluYW50IGZhY3RvciBpbiBhbnkgc3R1ZHkgKGFuZCBkaWQgc28gaW4gU3R1ZGllcyAxLTMpOyBpbiBTdHVkeSA0LCBpdCBsb2FkZWQgcG9zaXRpdmVseSBvbiBpdHMgZG9taW5hbnQgZmFjdG9yIChGYWN0b3IgMiwg4oCcaGVhcnTigJ0pLgoKYGBge3IgZmlndXJlIDEsIGZpZy53aWR0aCA9IDYsIGZpZy5oZWlnaHQgPSA2fQojIG1ha2UgZGF0YWZyYW1lCnM0X3N1YnNldF9wbG90dGluZyA8LSBjaGFyX3Bsb3R0aW5nICU+JSAKICBmaWx0ZXIoc3R1ZHkgPT0gInN0dWR5IDQiLAogICAgICAgICBjb25kaXRpb24gJWluJSBjKCJzdGFwbGVyIiwgInJvYm90IiwgImJlZXRsZSIsICJnb2F0IiwgImVsZXBoYW50IiwgImFkdWx0IikpICU+JQogIGRpc3RpbmN0KCkKCiMgcGxvdCEgKG9yZGVyZWQgYnkgc3R1ZHkgMSBmYWN0b3IgbG9hZGluZ3MpCnM0X3N1YnNldCA8LSBnZ3Bsb3QoczRfc3Vic2V0X3Bsb3R0aW5nLCAKICAgICAgICAgICAgICAgYWVzKHggPSBNZWFuLCB5ID0gcmVvcmRlcih3b3JkaW5nLCBkZXNjKHMxX29yZGVyKSksIGNvbG91ciA9IHMxX2NvbG9yKSkgKwogIGdlb21fcG9pbnQoc3RhdCA9ICJpZGVudGl0eSIsIHBvc2l0aW9uID0gImlkZW50aXR5Iiwgc2l6ZSA9IDQpICsKICBnZW9tX2Vycm9yYmFyaChhZXMoeG1pbiA9IExvd2VyLCB4bWF4ID0gVXBwZXIpLCBoZWlnaHQgPSAwKSArCiAgZmFjZXRfd3JhcCh+IGNvbmRpdGlvbiwgbmNvbCA9IDYsCiAgICAgICAgICAgICBsYWJlbGxlciA9IGxhYmVsbGVyKGNvbmRpdGlvbiA9IGZhY2V0TGFic19zNCkpICsKICB0aGVtZV9idygpICsKICB0aGVtZSh0ZXh0ID0gZWxlbWVudF90ZXh0KHNpemUgPSAyMCksCiAgICAgICAgYXhpcy50aXRsZS55ID0gZWxlbWVudF9ibGFuaygpLAogICAgICAgIGF4aXMudGV4dC55ID0gZWxlbWVudF90ZXh0KGZhY2UgPSAiaXRhbGljIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xvdXIgPSBwYWxldHRlX3MxKSwKICAgICAgICBwYW5lbC5ncmlkLm1pbm9yID0gZWxlbWVudF9ibGFuaygpLAogICAgICAgIGxlZ2VuZC5wb3NpdGlvbiA9ICJub25lIikgKwogIHNjYWxlX3hfY29udGludW91cyhuYW1lID0gIlxuTWVhbiByYXRpbmciLAogICAgICAgICAgICAgICAgICAgICBsaW1pdHMgPSBjKC0zLCAzKSwKICAgICAgICAgICAgICAgICAgICAgYnJlYWtzID0gc2VxKC0zLCAzLCAxKSwKICAgICAgICAgICAgICAgICAgICAgbGFiZWxzID0gc2VxKDAsIDYsIDEpKSArCiAgc2NhbGVfY29sb3VyX2JyZXdlcihuYW1lID0gIkZhY3RvcjoiLAogICAgICAgICAgICAgICAgICAgICAgdHlwZSA9ICJxdWFsIiwgcGFsZXR0ZSA9IDYpCgpzNF9zdWJzZXQKYGBgCgojIyBGaWd1cmUgUzEgKHN1cHBvcnRpbmcgbWF0ZXJpYWxzKQoKRmFjdG9yIGxvYWRpbmdzIGZvciB0aGUgNDAgbWVudGFsIGNhcGFjaXRpZXMgb24gdGhlIHRocmVlIHJvdGF0ZWQgZmFjdG9ycyBpbiBTdHVkeSAxLiBJdGVtcyBhcmUgY29sb3JlZCBieSB0aGVpciBkb21pbmFudCBmYWN0b3IgbG9hZGluZzogSXRlbXMgdGhhdCBsb2FkZWQgbW9zdCBzdHJvbmdseSBvbiB0aGUgYm9keSBmYWN0b3IgKHBoeXNpb2xvZ2ljYWwgc3RhdGVzIGFuZCB3aWxsKSBhcmUgaW4gcmVkOyBpdGVtcyB0aGF0IGxvYWRlZCBtb3N0IHN0cm9uZ2x5IG9uIHRoZSBoZWFydCBmYWN0b3IgKHNvY2lhbC1lbW90aW9uYWwgZXhwZXJpZW5jZXMgYW5kIG1vcmFsaXR5KSBhcmUgaW4gYmx1ZTsgYW5kIGl0ZW1zIHRoYXQgbG9hZGVkIG1vc3Qgc3Ryb25nbHkgb24gdGhlIG1pbmQgZmFjdG9yIChwZXJjZXB0dWFsLWNvZ25pdGl2ZSBhYmlsaXRpZXMgYW5kIGdvYWwgcHVyc3VpdCkgYXJlIGluIGdyZWVuLgoKYGBge3IgZmlndXJlIFMxLCBmaWcud2lkdGggPSAxMCwgZmlnLmhlaWdodCA9IDZ9CiMgc2V0IHVwIGxhYmVscyBmb3IgcGxvdCAoc2hvcnRlbmVkIHZlcnNpb24gb2YgbWVudGFsIGNhcGFjaXR5IGl0ZW1zKQp3b3JkaW5nIDwtIGxvYWRpbmdzKGVmYV9kMV9hbGxfcm90YXRlZE4pW10gJT4lCiAgZGF0YS5mcmFtZSgpICU+JQogIHJvd25hbWVzX3RvX2NvbHVtbih2YXIgPSAiaXRlbSIpICU+JQogIHNlbGVjdChpdGVtKSAlPiUKICBtdXRhdGUod29yZGluZyA9IGMoImZlZWxpbmcgaGFwcHkiLCAiZmVlbGluZyBkZXByZXNzZWQiLCAiZXhwZXJpZW5jaW5nIGZlYXIiLAogICAgICAgICAgICAgICAgICAgICAiZ2V0dGluZyBhbmdyeSIsICJmZWVsaW5nIGNhbG0iLCAiZGV0ZWN0aW5nIHNvdW5kcyIsCiAgICAgICAgICAgICAgICAgICAgICJzZWVpbmcgdGhpbmdzIiwgInNlbnNpbmcgdGVtcGVyYXR1cmVzIiwgImRldGVjdGluZyBvZG9ycyIsCiAgICAgICAgICAgICAgICAgICAgICJwZXJjZWl2aW5nIGRlcHRoIiwgImRvaW5nIGNvbXB1dGF0aW9ucyIsICJoYXZpbmcgdGhvdWdodHMiLAogICAgICAgICAgICAgICAgICAgICAicmVhc29uaW5nIGFib3V0IHRoaW5ncyIsICJyZW1lbWJlcmluZyB0aGluZ3MiLCAiaG9sZGluZyBiZWxpZWZzIiwKICAgICAgICAgICAgICAgICAgICAgImdldHRpbmcgaHVuZ3J5IiwgImZlZWxpbmcgdGlyZWQiLCAiZXhwZXJpZW5jaW5nIHBhaW4iLAogICAgICAgICAgICAgICAgICAgICAiZmVlbGluZyBuYXVzZWF0ZWQiLCAiZmVlbGluZyBzYWZlIiwgImZlZWxpbmcgbG92ZSIsCiAgICAgICAgICAgICAgICAgICAgICJyZWNvZ25pemluZyBzb21lb25lIiwgImNvbW11bmljYXRpbmcgd2l0aCBvdGhlcnMiLCAiZXhwZXJpZW5jaW5nIGd1aWx0IiwKICAgICAgICAgICAgICAgICAgICAgImZlZWxpbmcgZGlzcmVzcGVjdGVkIiwgImhhdmluZyBmcmVlIHdpbGwiLCAibWFraW5nIGNob2ljZXMiLAogICAgICAgICAgICAgICAgICAgICAiZXhlcmNpc2luZyBzZWxmLXJlc3RyYWludCIsICJoYXZpbmcgaW50ZW50aW9ucyIsICJ3b3JraW5nIHRvd2FyZCBhIGdvYWwiLAogICAgICAgICAgICAgICAgICAgICAiYmVpbmcgY29uc2Npb3VzIiwgImJlaW5nIHNlbGYtYXdhcmUiLCAiaGF2aW5nIGRlc2lyZXMiLAogICAgICAgICAgICAgICAgICAgICAiZmVlbGluZyBlbWJhcnJhc3NlZCIsICJ1bmRlcnN0YW5kaW5nIGhvdyBvdGhlcnMgYXJlIGZlZWxpbmciLCAKICAgICAgICAgICAgICAgICAgICAgImV4cGVyaWVuY2luZyBqb3kiLCAidGVsbGluZyByaWdodCBmcm9tIHdyb25nIiwgImhhdmluZyBhIHBlcnNvbmFsaXR5IiwKICAgICAgICAgICAgICAgICAgICAgImV4cGVyaWVuY2luZyBwbGVhc3VyZSIsICJleHBlcmllbmNpbmcgcHJpZGUiKSwKICAgICAgICAgc2hvcnQgPSBjKCJoYXBwaW5lc3MiLCAiZGVwcmVzc2lvbiIsICJmZWFyIiwKICAgICAgICAgICAgICAgICAgICJhbmdlciIsICJjYWxtIiwgInNvdW5kIiwKICAgICAgICAgICAgICAgICAgICJzaWdodCIsICJ0ZW1wZXJhdHVyZSIsICJvZG9yIiwKICAgICAgICAgICAgICAgICAgICJkZXB0aCIsICJjb21wdXRhdGlvbiIsICJ0aG91Z2h0IiwKICAgICAgICAgICAgICAgICAgICJyZWFzb25pbmciLCAibWVtb3J5IiwgImJlbGllZiIsCiAgICAgICAgICAgICAgICAgICAiaHVuZ2VyIiwgInRpcmVkbmVzcyIsICJwYWluIiwKICAgICAgICAgICAgICAgICAgICJuYXVzZWEiLCAic2FmZXR5IiwgImxvdmUiLAogICAgICAgICAgICAgICAgICAgInJlY29nbml0aW9uIiwgImNvbW11bmljYXRpb24iLCAiZ3VpbHQiLAogICAgICAgICAgICAgICAgICAgImRpc3Jlc3BlY3QiLCAiZnJlZSB3aWxsIiwgImNob2ljZSIsCiAgICAgICAgICAgICAgICAgICAic2VsZi1yZXN0cmFpbnQiLCAiaW50ZW50aW9uIiwgImdvYWwiLAogICAgICAgICAgICAgICAgICAgImNvbnNjaW91c25lc3MiLCAic2VsZi1hd2FyZW5lc3MiLCAiZGVzaXJlIiwKICAgICAgICAgICAgICAgICAgICJlbWJhcnJhc3NtZW50IiwgImVtcGF0aHkiLCAKICAgICAgICAgICAgICAgICAgICJqb3kiLCAibW9yYWxpdHkiLCAicGVyc29uYWxpdHkiLAogICAgICAgICAgICAgICAgICAgInBsZWFzdXJlIiwgInByaWRlIikpCgojIG1ha2UgZGF0YWZyYW1lIGZvciBwbG90dGluZwpzY2F0dGVyX3Bsb3R0aW5nIDwtIGxvYWRpbmdzKGVmYV9kMV9hbGxfcm90YXRlZE4pW10gJT4lCiAgZGF0YS5mcmFtZSgpICU+JQogIHJvd25hbWVzX3RvX2NvbHVtbih2YXIgPSAiaXRlbSIpICU+JQogIHJlbmFtZShCT0RZID0gTVIxLAogICAgICAgICBIRUFSVCA9IE1SMiwKICAgICAgICAgTUlORCA9IE1SMykgJT4lCiAgZnVsbF9qb2luKHdvcmRpbmcpICU+JQogIG11dGF0ZShkb21pbmFudCA9IGZhY3RvcigKICAgIGlmZWxzZShwbWF4KGFicyhCT0RZKSwgYWJzKEhFQVJUKSwgYWJzKE1JTkQpKSA9PSBhYnMoQk9EWSksICJCT0RZIiwKICAgICAgICAgICBpZmVsc2UocG1heChhYnMoQk9EWSksIGFicyhIRUFSVCksIGFicyhNSU5EKSkgPT0gYWJzKEhFQVJUKSwgIkhFQVJUIiwKICAgICAgICAgICAgICAgICAgaWZlbHNlKHBtYXgoYWJzKEJPRFkpLCBhYnMoSEVBUlQpLCBhYnMoTUlORCkpID09IGFicyhNSU5EKSwgIk1JTkQiLAogICAgICAgICAgICAgICAgICAgICAgICAgTkEpKSkpLAogICAgc2l6ZSA9IGlmZWxzZShwbWF4KGFicyhCT0RZKSwgYWJzKEhFQVJUKSwgYWJzKE1JTkQpKSA9PSBhYnMoQk9EWSksIGFicyhCT0RZKSwKICAgICAgICAgICAgICAgICAgaWZlbHNlKHBtYXgoYWJzKEJPRFkpLCBhYnMoSEVBUlQpLCBhYnMoTUlORCkpID09IGFicyhIRUFSVCksIGFicyhIRUFSVCksCiAgICAgICAgICAgICAgICAgICAgICAgICBpZmVsc2UocG1heChhYnMoQk9EWSksIGFicyhIRUFSVCksIGFicyhNSU5EKSkgPT0gYWJzKE1JTkQpLCBhYnMoTUlORCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTkEpKSksCiAgICBjb2xvciA9IGlmZWxzZShkb21pbmFudCA9PSAiQk9EWSIsICIjZTQxYTFjIiwKICAgICAgICAgICAgICAgICAgIGlmZWxzZShkb21pbmFudCA9PSAiSEVBUlQiLCAiIzM3N2ViOCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgaWZlbHNlKGRvbWluYW50ID09ICJNSU5EIiwgIiM0ZGFmNGEiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOQSkpKSkKCiMgcGxvdCEKZmlnUzEgPC0gcGxvdF9seShkYXRhID0gc2NhdHRlcl9wbG90dGluZywgCiAgICAgICAgICAgICAgICAgeCA9IH5IRUFSVCwgeSA9IH5CT0RZLCB6ID0gfk1JTkQsCiAgICAgICAgICAgICAgICAgdHlwZSA9ICJzY2F0dGVyM2QiLAogICAgICAgICAgICAgICAgIGNvbG9yID0gfmRvbWluYW50LCBjb2xvcnMgPSBjKCIjNGRhZjRhIiwgIiNlNDFhMWMiLCAiIzM3N2ViOCIpLAogICAgICAgICAgICAgICAgIG1hcmtlciA9IGxpc3Qoc2l6ZSA9IDQpLAogICAgICAgICAgICAgICAgIHRleHQgPSB+c2hvcnQsCiAgICAgICAgICAgICAgICAgdGV4dGZvbnQgPSBsaXN0KHNpemUgPSAxNSksCiAgICAgICAgICAgICAgICAgbW9kZSA9ICJ0ZXh0K21hcmtlcnMiLAogICAgICAgICAgICAgICAgIHNob3dsZWdlbmQgPSBUUlVFKQoKZmlnUzEKYGBgCgojIyBGaWd1cmUgUzIgKHN1cHBvcnRpbmcgbWF0ZXJpYWxzKQoKTWVhbiByYXRpbmdzIG9mIDQwIG1lbnRhbCBjYXBhY2l0aWVzIGZvciB0aGUgMiBlbnRpdGllcyBpbmNsdWRlZCBpbiBTdHVkaWVzIDEtMy4gUGFydGljaXBhbnRzIHJlc3BvbmRlZCBvbiBhIHNjYWxlIGZyb20gMCAoTm90IGF0IGFsbCBjYXBhYmxlKSB0byA2IChIaWdobHkgY2FwYWJsZSkuIEVycm9yIGJhcnMgYXJlIG5vbnBhcmFtZXRyaWMgYm9vdHN0cmFwcGVkIDk1JSBjb25maWRlbmNlIGludGVydmFscy4gTWVudGFsIGNhcGFjaXRpZXMgYXJlIGdyb3VwZWQgYWNjb3JkaW5nIHRvIHRoZWlyIGRvbWluYW50IGZhY3RvciBsb2FkaW5nIGluIFN0dWR5IDEuCgpgYGB7ciBmaWd1cmUgUzIsIGZpZy53aWR0aCA9IDUsIGZpZy5oZWlnaHQgPSA2fQojIG1ha2UgZGF0YWZyYW1lCnMxMjNfcGxvdHRpbmcgPC0gY2hhcl9wbG90dGluZyAlPiUgCiAgZmlsdGVyKHN0dWR5ICE9ICJzdHVkeSA0IikgJT4lCiAgZGlzdGluY3QoKQoKIyBwbG90ISAob3JkZXJlZCBieSBzdHVkeSAzIGZhY3RvciBsb2FkaW5ncykKczEyMyA8LSBnZ3Bsb3QoczEyM19wbG90dGluZywgCiAgICAgICAgICAgICAgIGFlcyh5ID0gTWVhbiwgeCA9IHJlb3JkZXIod29yZGluZywgZGVzYyhzMV9vcmRlcikpLCBjb2xvdXIgPSBzMV9jb2xvciwKICAgICAgICAgICAgICAgICAgIHNoYXBlID0gc3R1ZHkpKSArCiAgZ2VvbV9wb2ludChzdGF0ID0gImlkZW50aXR5IiwgcG9zaXRpb24gPSBwb3NpdGlvbl9kb2RnZSh3aWR0aCA9IDAuNiksIHNpemUgPSA0KSArCiAgZ2VvbV9lcnJvcmJhcihhZXMoeW1pbiA9IExvd2VyLCB5bWF4ID0gVXBwZXIpLCB3aWR0aCA9IDAsCiAgICAgICAgICAgICAgICBwb3NpdGlvbiA9IHBvc2l0aW9uX2RvZGdlKHdpZHRoID0gMC42KSkgKwogIGZhY2V0X3dyYXAofiBjb25kaXRpb24pICsKICB0aGVtZV9idygpICsKICBzY2FsZV95X2NvbnRpbnVvdXMobmFtZSA9ICJcbk1lYW4gcmF0aW5nIiwKICAgICAgICAgICAgICAgICAgICAgbGltaXRzID0gYygtMywgMyksCiAgICAgICAgICAgICAgICAgICAgIGJyZWFrcyA9IHNlcSgtMywgMywgMSksCiAgICAgICAgICAgICAgICAgICAgIGxhYmVscyA9IHNlcSgwLCA2LCAxKSkgKwogIHNjYWxlX3NoYXBlX2Rpc2NyZXRlKG5hbWUgPSAiU3R1ZHk6IikgKwogIHNjYWxlX2NvbG91cl9icmV3ZXIobmFtZSA9ICJGYWN0b3I6IiwKICAgICAgICAgICAgICAgICAgICAgIHR5cGUgPSAicXVhbCIsIHBhbGV0dGUgPSA2LAogICAgICAgICAgICAgICAgICAgICAgZ3VpZGUgPSBGQUxTRSkgKwogIGNvb3JkX2ZsaXAoKSArCiAgdGhlbWUodGV4dCA9IGVsZW1lbnRfdGV4dChzaXplID0gMjApLAogICAgICBheGlzLnRpdGxlLnkgPSBlbGVtZW50X2JsYW5rKCksCiAgICAgIGF4aXMudGV4dC55ID0gZWxlbWVudF90ZXh0KGZhY2UgPSAiaXRhbGljIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sb3VyID0gcGFsZXR0ZV9zMSksCiAgICAgIHBhbmVsLmdyaWQubWlub3IgPSBlbGVtZW50X2JsYW5rKCksCiAgICAgIGxlZ2VuZC5wb3NpdGlvbiA9ICJyaWdodCIpCgpzMTIzCmBgYAoKIyMgRmlndXJlIFMzIChzdXBwb3J0aW5nIG1hdGVyaWFscykKCk1lYW4gcmF0aW5ncyBvZiA0MCBtZW50YWwgY2FwYWNpdGllcyBmb3IgYWxsIDIxIGVudGl0aWVzIGluY2x1ZGVkIGluIFN0dWR5IDQuIFBhcnRpY2lwYW50cyByZXNwb25kZWQgb24gYSBzY2FsZSBmcm9tIDAgKE5vdCBhdCBhbGwgY2FwYWJsZSkgdG8gNiAoSGlnaGx5IGNhcGFibGUpLiBFcnJvciBiYXJzIGFyZSBub25wYXJhbWV0cmljIGJvb3RzdHJhcHBlZCA5NSUgY29uZmlkZW5jZSBpbnRlcnZhbHMuIE1lbnRhbCBjYXBhY2l0aWVzIGFyZSBncm91cGVkIGFjY29yZGluZyB0byB0aGVpciBkb21pbmFudCBmYWN0b3IgbG9hZGluZyBpbiBTdHVkeSA0LgoKYGBge3IgZmlndXJlIFMzLCBmaWcud2lkdGggPSAxMiwgZmlnLmhlaWdodCA9IDZ9CiMgbWFrZSBkYXRhZnJhbWUKczRfcGxvdHRpbmcgPC0gY2hhcl9wbG90dGluZyAlPiUgCiAgZmlsdGVyKHN0dWR5ID09ICJzdHVkeSA0IikgJT4lCiAgZGlzdGluY3QoKQoKIyBwbG90ISAob3JkZXJlZCBieSBzdHVkeSA0IGZhY3RvciBsb2FkaW5ncykKczQgPC0gZ2dwbG90KHM0X3Bsb3R0aW5nLCAKICAgICAgICAgICAgICAgYWVzKHggPSBNZWFuLCB5ID0gcmVvcmRlcih3b3JkaW5nLCBkZXNjKHM0X29yZGVyKSksIGNvbG91ciA9IHM0X2NvbG9yKSkgKwogIGdlb21fcG9pbnQoc3RhdCA9ICJpZGVudGl0eSIsIHBvc2l0aW9uID0gImlkZW50aXR5Iiwgc2l6ZSA9IDQpICsKICBnZW9tX2Vycm9yYmFyaChhZXMoeG1pbiA9IExvd2VyLCB4bWF4ID0gVXBwZXIpLCBoZWlnaHQgPSAwKSArCiAgZmFjZXRfd3JhcCh+IGNvbmRpdGlvbiwgbmNvbCA9IDIxLAogICAgICAgICAgICAgbGFiZWxsZXIgPSBsYWJlbGxlcihjb25kaXRpb24gPSBmYWNldExhYnNfczQpKSArCiAgdGhlbWVfYncoKSArCiAgdGhlbWUodGV4dCA9IGVsZW1lbnRfdGV4dChzaXplID0gMjApLAogICAgICAgIGF4aXMudGl0bGUueSA9IGVsZW1lbnRfYmxhbmsoKSwKICAgICAgICBheGlzLnRleHQueSA9IGVsZW1lbnRfdGV4dChmYWNlID0gIml0YWxpYyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sb3VyID0gcGFsZXR0ZV9zNCksCiAgICAgICAgcGFuZWwuZ3JpZC5taW5vciA9IGVsZW1lbnRfYmxhbmsoKSwKICAgICAgICBsZWdlbmQucG9zaXRpb24gPSAibm9uZSIpICsKICBzY2FsZV94X2NvbnRpbnVvdXMobmFtZSA9ICJcbk1lYW4gcmF0aW5nIiwKICAgICAgICAgICAgICAgICAgICAgbGltaXRzID0gYygtMywgMyksCiAgICAgICAgICAgICAgICAgICAgIGJyZWFrcyA9IHNlcSgtMywgMywgMSksCiAgICAgICAgICAgICAgICAgICAgIGxhYmVscyA9IHNlcSgwLCA2LCAxKSkgKwogIHNjYWxlX2NvbG91cl9icmV3ZXIobmFtZSA9ICJGYWN0b3I6IiwKICAgICAgICAgICAgICAgICAgICAgIHR5cGUgPSAicXVhbCIsIHBhbGV0dGUgPSA2KQoKczQKYGBgCgo=